【问题标题】:Construct vector from vector with conversion/scale使用转换/比例从向量构造向量
【发布时间】:2018-05-20 02:56:34
【问题描述】:

全部

假设我得到了数据以 cm 为单位的向量,并想构造另一个向量,但以 mm 为单位(或 mm 带移位,或 ...,所以它不是很简单)。

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

我写了一些代码做迭代器适配器

struct scaling_iterator_adaptor {
    ...
};

vector v_mm{ scaling_iterator_adaptor{v_cm.begin()}, scaling_iterator_adaptor{v_cm.end()} };

有没有更好的方法来完成这样的任务?概念上的不同方式?

【问题讨论】:

  • reserve(),然后是一个简单的范围迭代,push_back() 将新值放入新向量中。我认为炮制一些奇特的转换迭代器没有多大好处。
  • @SamVarshavchik 是的,我有两行代码——reserve+for_each。也许这是一个过于复杂的......

标签: c++ iterator stdvector


【解决方案1】:

如果不需要构建已经包含的所有数据,您可以使用标准算法:

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::back_inserter

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 2011-05-24
    • 1970-01-01
    • 2012-03-14
    • 2018-01-11
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 2020-07-07
    相关资源
    最近更新 更多