C++ vector使用的一些注意事项
C++ vector使用的一些注意事项 C++ 中的 vector 是一个非常常用的容器类,它提供了一个动态数组的实现,能够自动管理内存,避免了手动内存管理的麻烦。然而,在使用 vector 时需要注意一些问题,这篇文章将为大家介绍一些关于 C++ vector 使用的一些注意事项。 初始化 在 C++11 以后,vector 的初始化方式增加了大括号 {} 的方式,需要注意与 () 的区别。例如: `std::vector<int> vecTest1(5);` // 初始化 5 个元素,每个都是 0 `std::vector<int> vecTest2{ 5 };` // 初始化 1 个元素,值是 5 添加元素 添加元素时,vector 的内存有时候会发生变化,这取决于 size 和 capacity 的大小。当 size 小于 capacity 时,直接将元素添加到尾部,不会变化。当 size 等于 capacity 时,会重新申请另外一块内存,然后 copy 过去并添加到尾部,这个时候就会有变化了。 vector 是一段连续的内存空间,有三个标识内存的位置,start,end,finish, size=end-start, capacity=finish-start。很多时候,在使用 vector 时,会看到 size=capacity,这个时候直接添加元素到尾部,内存明显是不够的,此时会重新在别处分配一块大小足够的内存。 erase 和 remove erase 返回的是当前删除的元素的下一个位置的迭代器,所以需要注意的是遍历时候的 ++ 运算,这个与其它 list、map 差不多。需要注意的是 erase 后内存并未真正的清空,仅仅是删除内容,真正的容量大小 capacity 并没有改变,需要通过 swap 来实现 capacity 的减小。 例如: `auto itor = vecNum.begin();` `for( ; itor != vecNum.end(); ){` ` auto num = *itor;` ` if(num == 60) {` ` itor = vecNum.erase(itor);` ` break;` ` } else {` ` itor++;` ` }` `}` `std::cout << "after erase element 60:" << std::endl;` `printVector(vecNum);` `vector<int>(vecNum).swap(vecNum); // 将 vecNum 的内存空洞清除` `printVector(vecNum);` remove 只是通过迭代器的指针向前移动来删除,将不需要删除的元素往前移,因此需要删除的就都在尾部了。返回新的指向尾部需要删除的元素的迭代器。因此还是得配合 erase 来使用,所以一般真要删除,建议直接遍历使用 erase。 C++ 中的 vector 是一个非常有用的容器类,但需要注意一些使用注意事项,以避免出现一些问题。
- 粉丝: 2
- 资源: 921
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助