Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用与其他向量相关的索引函数初始化常量向量_C++_Vector_C++14 - Fatal编程技术网

C++ 使用与其他向量相关的索引函数初始化常量向量

C++ 使用与其他向量相关的索引函数初始化常量向量,c++,vector,c++14,C++,Vector,C++14,在C++14中,是否可以使用另一个相同类型的向量初始化一个const向量,同时也可能执行与元素相关的操作 也就是说,我想要这样的东西: const vector<double> vec1 = {1.0, 3.0, 4.0, 5.0}; vector<double> vec2(4); for (int i = 0; i < 4; i++) { vec2[i] = vec1[i] * 3 + i; } 常量向量vec1={1.0,3.0,4.0,5.0}; 向

在C++14中,是否可以使用另一个相同类型的向量初始化一个
const
向量,同时也可能执行与元素相关的操作

也就是说,我想要这样的东西:

const vector<double> vec1 = {1.0, 3.0, 4.0, 5.0};
vector<double> vec2(4);
for (int i = 0; i < 4; i++) {
    vec2[i] = vec1[i] * 3 + i;
}
常量向量vec1={1.0,3.0,4.0,5.0}; 向量向量2(4); 对于(int i=0;i<4;i++){ vec2[i]=vec1[i]*3+i; } 或者其他一些依赖于
i
的操作,但是vec2也应该是
const

当然可以:

std::vector<double> foo(const std::vector<double>& v) { ... }

const std::vector<double> vec2 = foo(vec1);
std::vector foo(const std::vector&v){…}
常数std::向量vec2=foo(vec1);

仅仅因为我觉得编写通用代码很有趣:

template<class F, class C>
C indexed_transform( C in, F&& f ) {
  for (size_t i = 0; i < in.size(); ++i) {
    in[i] = f(i, in[i]);
  }
  return in;
}

const vector<double> vec1 = {1.0, 3.0, 4.0, 5.0};

const std::vector<double> vec2 = indexed_transform(vec1,
  [](size_t i, double d){
    return d*3+i;
  }
);
模板
C索引_变换(C in,F&&F){
对于(大小i=0;i

还可用于
std::string
std::array
(效率较低)、
std::deque
,以及任何随机访问容器。在随机访问范围上,它修改其传入参数(并返回该参数)。

您始终可以编写自己的“transformation range”类,该类公开一对迭代器和一个模板转换函数,因此一般的答案是“是”。那是否方便由你决定。