C++ 使用转换/缩放从向量构造向量
全部 假设我得到了以cm为单位的向量,并且想要构造另一个以mm为单位的向量(或者mm带移位,或者…,所以这不是很简单) 完成这项任务的好方法是什么 我写了一些代码来实现迭代器适配器C++ 使用转换/缩放从向量构造向量,c++,iterator,stdvector,C++,Iterator,Stdvector,全部 假设我得到了以cm为单位的向量,并且想要构造另一个以mm为单位的向量(或者mm带移位,或者…,所以这不是很简单) 完成这项任务的好方法是什么 我写了一些代码来实现迭代器适配器 struct scaling_iterator_adaptor { ... }; vector v_mm{ scaling_iterator_adaptor{v_cm.begin()}, scaling_iterator_adaptor{v_cm.end()} }; 有没有更好的方法来完成这样的任务?概念
struct scaling_iterator_adaptor {
...
};
vector v_mm{ scaling_iterator_adaptor{v_cm.begin()}, scaling_iterator_adaptor{v_cm.end()} };
有没有更好的方法来完成这样的任务?概念上不同的方式?如果没有必要使用已经包含的所有数据来构建它,您可以使用标准算法:
std::vector<double> v_cm{1, 3.14, 4.2};
std::vector<double> v_mm(v_cm.size());
std::transform(v_cm.cbegin(), v_cm.cend(), v_mm.begin(), [](double x){ return x * 10; });
std::向量v_cm{1,3.14,4.2};
向量v_mm(v_cm.size());
std::transform(v_cm.cbegin(),v_cm.cend(),v_mm.begin(),[](双x){return x*10;});
如果不想用零预先填充目标,可以使用
std::back_inserter
。reserve()
,然后进行一次简单的范围迭代,push_back
(),将新值放入新向量。我看不出混合一些奇异的转换迭代器有什么好处。@SamVarshavchik是的,我有两行代码来完成它-reserve+for_。也许这是一种过度复杂化。。。