我有一个数字向量,例如{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算法执行此操作的“优雅”方式,或者说简短的方式。
答案 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
将一个函数迭代地应用于一个值,它甚至可能更具表现力。