C++ 怎么把int存进vector C++ vector添加int元素【详解】

3次阅读

vector 末尾添加元素首选 push_back(),安全高效;emplace_back() 对非平凡类型更优;避免 insert() 中间插入 int

C++ 怎么把int存进vector C++ vector添加int元素【详解】

直接存,不用转换,vector<int></int> 就是干这个的。

push_back() 最常用也最安全

绝大多数时候你只需要往末尾加一个 intpush_back() 是首选。它自动处理内存扩容,语义清晰,且不会越界。

  • 常见错误:手写循环 + operator[] 赋值,但没调用 resize()reserve(),结果访问未分配内存 → 崩溃或未定义行为
  • 正确做法:vec.push_back(42),哪怕 vec 是空的也没问题
  • 性能影响:均摊 O(1),个别扩容时是 O(n),但对普通使用完全无感

emplace_back() 能省一次拷贝(但 int 没差别)

emplace_back() 直接在 vector 末尾构造对象,避免临时对象和拷贝/移动。不过对 int 这种 trivial 类型,编译器基本都优化掉了,效果和 push_back() 一样。

  • 使用场景:当你存的是自定义类、Stringpair 等非 trivial 类型时,emplace_back(1, "hello")push_back({1, "hello"}) 更高效
  • 参数差异:emplace_back()可变参数,转发给元素类型的构造函数push_back() 接一个已存在的值或右值
  • 容易踩的坑:误以为 emplace_back() 总是更快 —— 对 int 完全没必要,还可能让代码更难读

别用 insert() 往中间插 int(除非真需要)

insert() 会把指定位置之后的所有元素往后挪,时间复杂度是 O(n)。对 int 来说,这不仅是性能浪费,还容易因下标算错导致越界。

立即学习C++免费学习笔记(深入)”;

  • 典型错误:vec.insert(vec.begin() + i, x),但 i > vec.size() → 运行时崩溃(debug 模式下可能触发断言)
  • 正确前提:确保 i ;如果只是追加,就别碰 <code>insert()
  • 兼容性注意:某些老编译器(如 VS2013 以前)对 insert() 的迭代器检查不严格,掩盖了 bug

真正要注意的不是“怎么存”,而是“什么时候该用什么方式”。比如初始化一批数据,vector<int> v = {1, 2, 3};</int> 比循环 push_back() 更简洁;而边算边存,就老老实实用 push_back()。别为了炫技去套 emplace_back()insert(),尤其当类型是 int 的时候。

text=ZqhQzanResources