c++ - 优化将 std::uint32_t 插入 std::vector
问题描述
我正在尝试将一个无符号整数数组插入到 std::vector 中。
这是我当前的代码:
auto add_chars(std::vector<char> & vec, unsigned val[]){
std::string tmp;
tmp.resize(11) // Max chars a uint can be represented by, including the '\n' for sprintf
for (auto x = 0; x< 10; x++){
auto char_count = sprintf(tmp.data(),"%u", val[x]);
vec.insert(vec.begin()+vec.size(),tmp.data(), tmp.data()+char_count);
}
}
int main(){
std::vector<char> chars;
unsigned val[10] {1,200,3,4,5,6000,7,8,9000};
add_chars(chars,val);
for (auto & item : chars){
std::cout << item;
}
}
这个解决方案有效,但是我质疑它的效率(和优雅)。
两个问题:
- 有没有更惯用的方式来做到这一点?
- 有没有更有效的方法来做到这一点?
*edit 修复了转移到此处时生成的代码中的错误。
另外,我知道“9000”不能表示为 1 个字符,这就是为什么我使用缓冲区和 sprintf 为一个 uint 生成多个字符。
解决方案
有没有更惯用的方式来做到这一点?
字符流是惯用的。不幸的是,该标准只有一个用于构建字符串的流;不是向量。您可以将字符串复制到向量中。这不是最有效的方法:
std::ostringstream ss;
unsigned val[10] {1,200,3,4,5,6000,7,8,9000};
for (auto v : val)
ss << v;
std::string str = ss.str();
// if you need a vector for some reason
std::vector<char> chars(std::begin(str), std::end(str));
或者您可以编写自己的自定义矢量流,但这将是很多样板文件。
推荐阅读
- javascript - Js - Worker - importScript 和污染上下文
- python - 将 2D numpy 数组的 pandas 列转换为 3D numpy 数组
- json - json 输出和 cflocation 不能很好地播放
- java - 将状态栏更改为白色
- python - 条目小部件在调用另一个模块的函数中无法正常工作
- javascript - 基于内部对象属性值的数组操作?
- javascript - 一个单词的正则表达式,没有空格
- mysql - 只选择重复mysql的记录
- string - 循环遍历多个字符串变量以生成存在/不存在的结果变量
- html - li 内 div 的宽度不对齐