沈阳网站建设公司报价常州做网站的 武进
2026/4/18 7:35:17 网站建设 项目流程
沈阳网站建设公司报价,常州做网站的 武进,骏域网络科技有限公司,多用户分布式网站开发目录 一、Vector 是什么#xff1f; 二、Vector 的基本使用 2.1 构造与初始化 2.2 迭代器使用 2.3 容量操作 三、Vector 的增删查改 3.1 基本操作 四、迭代器失效问题#xff08;重点#xff01;#xff09; 4.1 导致迭代器失效的操作 4.2 错误示例 4.3 正确做法…目录一、Vector 是什么二、Vector 的基本使用2.1 构造与初始化2.2 迭代器使用2.3 容量操作三、Vector 的增删查改3.1 基本操作四、迭代器失效问题重点4.1 导致迭代器失效的操作4.2 错误示例4.3 正确做法五、Vector 在算法题中的应用5.1 只出现一次的数字异或技巧5.2 杨辉三角六、Vector 的模拟实现注意事项6.1 深拷贝问题6.2 动态二维数组七、实战练习建议八、总结一、Vector 是什么vector是 C 标准模板库STL中的一个动态数组容器它能够根据需要自动调整大小支持快速随机访问是 C 中最常用的容器之一。二、Vector 的基本使用2.1 构造与初始化cpp#include vector using namespace std; vectorint v1; // 空vector vectorint v2(5, 10); // 5个元素每个都是10 vectorint v3(v2); // 拷贝构造 vectorint v4(v3.begin(), v3.end()); // 迭代器范围构造2.2 迭代器使用cppvectorint v {1, 2, 3, 4, 5}; // 正向迭代 for (auto it v.begin(); it ! v.end(); it) { cout *it ; } // 反向迭代 for (auto it v.rbegin(); it ! v.rend(); it) { cout *it ; }2.3 容量操作cppvectorint v; cout v.size(); // 元素个数 cout v.capacity(); // 当前容量 cout v.empty(); // 是否为空 v.reserve(100); // 预留至少100个元素的空间 v.resize(50); // 调整大小为50多出的用默认值填充注意不同编译器下vector的扩容策略不同VS 下按 1.5 倍增长g 下按 2 倍增长三、Vector 的增删查改3.1 基本操作cppvectorint v; // 增 v.push_back(10); // 尾插 v.insert(v.begin(), 5); // 在指定位置插入 // 删 v.pop_back(); // 尾删 v.erase(v.begin()); // 删除指定位置 v.clear(); // 清空 // 查 auto it find(v.begin(), v.end(), 10); // 查找元素 if (it ! v.end()) { cout 找到了; } // 改 v[0] 100; // 像数组一样访问四、迭代器失效问题重点迭代器失效是使用vector时最容易出错的问题之一。简单说就是当vector发生某些操作后之前获取的迭代器指向的内存可能已经无效。4.1 导致迭代器失效的操作扩容操作push_back、resize、reserve、insert等可能导致扩容删除操作erase删除元素赋值操作assign4.2 错误示例cppvectorint v {1, 2, 3, 4}; auto it v.begin(); v.push_back(5); // 可能导致扩容it失效 // 错误it可能指向已释放的内存 while (it ! v.end()) { cout *it ; it; }4.3 正确做法cpp// 删除所有偶数 - 正确写法 vectorint v {1, 2, 3, 4, 5}; auto it v.begin(); while (it ! v.end()) { if (*it % 2 0) { it v.erase(it); // erase返回下一个有效迭代器 } else { it; } }五、Vector 在算法题中的应用5.1 只出现一次的数字异或技巧cppint singleNumber(vectorint nums) { int value 0; for (auto e : nums) { value ^ e; // 利用 a^a0 的特性 } return value; }5.2 杨辉三角cppvectorvectorint generate(int numRows) { vectorvectorint vv(numRows); for (int i 0; i numRows; i) { vv[i].resize(i 1, 1); // 每行初始化为1 for (int j 1; j i; j) { vv[i][j] vv[i-1][j] vv[i-1][j-1]; } } return vv; }六、Vector 的模拟实现注意事项6.1 深拷贝问题在模拟实现vector时reserve中不能使用memcpy来拷贝元素尤其是元素类型涉及资源管理如string时cpp// 错误浅拷贝会导致问题 void reserve(size_t n) { // ... memcpy(_newStart, _start, sizeof(T) * size()); // 危险 } // 正确做法使用循环赋值调用元素的拷贝构造 for (size_t i 0; i size(); i) { _newStart[i] _start[i]; // 调用T的operator或拷贝构造 }6.2 动态二维数组cpp// 创建n行的二维数组 vectorvectorint vv(n); // 每行设置不同大小 for (int i 0; i n; i) { vv[i].resize(i 1, 1); }七、实战练习建议基础操作熟练掌握push_back、pop_back、operator[]、size等常用接口迭代器理解理解迭代器失效的原因及解决方案OJ练习删除排序数组中的重复项只出现一次的数字 II/III数组中出现次数超过一半的数字电话号码字母组合八、总结vector是 C 中最实用、最高效的容器之一掌握它需要理解其底层是动态数组熟悉常用接口的使用场景特别注意迭代器失效问题了解不同编译器下的扩容策略差异通过理论学习和实际编码练习相结合你一定能熟练掌握vector为后续的 C 学习和开发打下坚实基础

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询