Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.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++_Iterator_Stdvector - Fatal编程技术网

C++ 使用转换/缩放从向量构造向量

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()} }; 有没有更好的方法来完成这样的任务?概念

全部

假设我得到了以cm为单位的向量,并且想要构造另一个以mm为单位的向量(或者mm带移位,或者…,所以这不是很简单)

完成这项任务的好方法是什么

我写了一些代码来实现迭代器适配器

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_。也许这是一种过度复杂化。。。