在其他向量上使用索引相关函数初始化 const 向量
Initializing const vector with index-dependent function on other vector
在 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;
}
或其他一些依赖于 i
的操作,但 vec2 也应该是 const
。
当然:
std::vector<double> foo(const std::vector<double>& v) { ... }
const std::vector<double> 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;
}
);
也适用于 std::string
、std::array
(有点低效)、std::deque
和任何随机访问容器。在随机访问范围内,它修改其传入参数(和 returns 它)。
在 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;
}
或其他一些依赖于 i
的操作,但 vec2 也应该是 const
。
当然:
std::vector<double> foo(const std::vector<double>& v) { ... }
const std::vector<double> 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;
}
);
也适用于 std::string
、std::array
(有点低效)、std::deque
和任何随机访问容器。在随机访问范围内,它修改其传入参数(和 returns 它)。