【发布时间】:2023-03-07 05:28:01
【问题描述】:
我正在尝试将一个无符号整数数组插入到 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 生成多个字符。
【问题讨论】:
-
'这行得通'。不是真的,你正在写一个零长度的字符串。
sprintf不会调整字符串的大小以适合您放入其中的字符。我想它只是在实践中起作用,因为 短字符串优化 的常见实现技术意味着您可以在字符串对象本身中使用一些字节。 -
在字符向量中插入整数数组有什么意义?
-
tmp.data()是只读的。没有? -
嗯,但是当您尝试将
9000转换为字符时,您期望什么? -
@Narase 不,这是词法转换。
标签: c++