C++ 使用与其他向量相关的索引函数初始化常量向量
在C++14中,是否可以使用另一个相同类型的向量初始化一个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}; 向
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”类,该类公开一对迭代器和一个模板转换函数,因此一般的答案是“是”。那是否方便由你决定。