使用STL将数字向量转换为整数

时间:2019-07-18 19:51:23

标签: c++ stl

我有一个数字向量,例如{3,6,0,1,8} 我需要使用向量的每个数字一致地将其转换为整数。 所以我得到的号码是36018。

可能的解决方案:

std::vector<int> values = {1, 3, 4, 5};
int res = 0, s = values.size();
for(int num : values) res += num * pow(10, --s);

我想知道是否还有使用stl算法执行此操作的“优雅”方式,或者说简短的方式。

3 个答案:

答案 0 :(得分:4)

您可以使用std::accumulate

/tmp/9090909PP.var

答案 1 :(得分:4)

常规的for循环更易于阅读,因此IMO是更优雅的选择:

int num = 0;
for (int d : values) {
  num = num * 10 + d;
}

答案 2 :(得分:0)

使用C ++ 20-Ranges或range-v3,它可以变得很易读

#include <iostream>
#include <vector>

#include <range/v3/all.hpp>

int main() {
  std::vector<int> values{1, 2, 3};

  auto powers_of_10 = ranges::view::generate([n = 1]() mutable {
    auto res = n;
    n *= 10;
    return res;
  });

  auto num = ranges::inner_product(powers_of_10, values | ranges::view::reverse, 0);

  std::cout << num << '\n';
}

这里的想法是产生10 [1, 10, 100, ...]的幂次范围,然后简单地计算带有反向输入矢量的点积。

如果有一个iterate_view将一个函数迭代地应用于一个值,它甚至可能更具表现力。