Namespaces
Variants

std::valarray<T>::cshift

来自 zh.cppreference.net
 
 
 
 
valarray<T> cshift( int count ) const;

返回一个新的 valarray,大小相同,其中的元素位置按count个元素循环移位。

非负的count将元素向左循环移位count个位置,负的count将元素向右循环移位-count个位置。

参数

count - 元素需要移动的位数

返回值

结果为一个包含循环移位元素的 valarray。

注意

该函数可以使用不同于std::valarray的返回类型实现。在这种情况下,替换类型具有以下属性:

  • 所有 const 的成员函数 std::valarray 均提供。
  • std::valarray、 std::slice_array、 std::gslice_array、 std::mask_array 和 std::indirect_array 可以从替换类型构造。
  • 对于每个接受 const std::valarray<T>& 的函数,除了 begin() 和 end() (C++11 起),应添加接受替换类型的相同函数;
  • 对于每个接受两个 const std::valarray<T>& 参数的函数,应添加接受 const std::valarray<T>& 和替换类型的每种组合的相同函数。
  • 返回类型不超过最深层嵌套参数类型的模板嵌套两层。

示例

#include <print>
#include <valarray>

int main()
{
    const std::valarray<int> v{1, 2, 3, 4, 5, 6, 7, 8};
    std::println("{}", v);
    std::println("{} <- 3", v.cshift(3));
    std::println("{} <- 11", v.cshift(11));
    std::println("{} -> 2", v.cshift(-2));
    std::println("{} -> 10", v.cshift(-10));
}

输出:

[1, 2, 3, 4, 5, 6, 7, 8]
[4, 5, 6, 7, 8, 1, 2, 3] <- 3
[4, 5, 6, 7, 8, 1, 2, 3] <- 11
[7, 8, 1, 2, 3, 4, 5, 6] -> 2
[7, 8, 1, 2, 3, 4, 5, 6] -> 10

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 适用范围 发布时行为 正确行为
LWG 618 C++98 若 size() 为 ​ 0 ​
则移位元素的表达式包含零除错误
在不使用表达式的情况下
描述新位置

参见

对 valarray 的元素进行零填充移位
(公开成员函数)