C++ 容器迭代器详解:vector 与 list

举报
鱼弦 发表于 2025/03/22 23:44:49 2025/03/22
【摘要】 C++ 容器迭代器详解:vector 与 list一、‌介绍‌迭代器是C++ STL(标准模板库)中用于遍历容器元素的工具,提供了一种统一的方式来访问容器中的数据。vector 和 list 是两种常用的容器,它们的迭代器行为有所不同:vector‌:动态数组,支持随机访问,迭代器是随机访问迭代器。list‌:双向链表,不支持随机访问,迭代器是双向迭代器‌。二、‌应用使用场景‌遍历容器‌:使...

C++ 容器迭代器详解:vector 与 list
一、‌介绍‌

迭代器是C++ STL(标准模板库)中用于遍历容器元素的工具,提供了一种统一的方式来访问容器中的数据。vector 和 list 是两种常用的容器,它们的迭代器行为有所不同:

vector‌:动态数组,支持随机访问,迭代器是随机访问迭代器。
list‌:双向链表,不支持随机访问,迭代器是双向迭代器‌。
二、‌应用使用场景‌
遍历容器‌:使用迭代器访问容器中的元素。
插入/删除元素‌:在指定位置插入或删除元素。
算法操作‌:与STL算法结合使用,如sort、find等‌。
三、‌不同场景下的详细代码实现‌

  1. ‌vector 迭代器‌
    cpp
    Copy Code
    #include <iostream>
    #include <vector>

int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 遍历
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// 插入元素
vec.insert(vec.begin() + 2, 10); // 在第三个位置插入10
// 删除元素
vec.erase(vec.begin() + 1); // 删除第二个元素
// 遍历
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
return 0;
}

  1. ‌list 迭代器‌
    cpp
    Copy Code
    #include <iostream>
    #include <list>

int main() {
std::list<int> lst = {1, 2, 3, 4, 5};
// 遍历
for (auto it = lst.begin(); it != lst.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// 插入元素
auto it = lst.begin();
std::advance(it, 2); // 移动到第三个位置
lst.insert(it, 10);
// 删除元素
lst.erase(lst.begin()); // 删除第一个元素
// 遍历
for (auto it = lst.begin(); it != lst.end(); ++it) {
std::cout << *it << " ";
}
return 0;
}

四、‌原理解释‌
vector 迭代器‌:支持随机访问,可以通过+、-操作符快速定位元素。
list 迭代器‌:仅支持双向移动,通过++、–操作符逐个访问元素‌。
五、‌算法原理流程图‌
plaintext
Copy Code
开始 → 初始化迭代器 → 遍历容器 → 执行操作(插入/删除/修改) → 结束

六、‌实际详细应用代码示例‌

  1. ‌使用vector迭代器进行排序‌
    cpp
    Copy Code
    #include <iostream>
    #include <vector>
    #include <algorithm>

int main() {
std::vector<int> vec = {5, 3, 1, 4, 2};
std::sort(vec.begin(), vec.end());
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
return 0;
}

  1. ‌使用list迭代器查找元素‌
    cpp
    Copy Code
    #include <iostream>
    #include <list>

int main() {
std::list<int> lst = {1, 2, 3, 4, 5};
auto it = std::find(lst.begin(), lst.end(), 3);
if (it != lst.end()) {
std::cout << "Found: " << *it << std::endl;
} else {
std::cout << “Not found” << std::endl;
}
return 0;
}

七、‌测试步骤‌
编写测试用例‌:针对vector和list的迭代器功能编写测试代码。
编译与运行‌:使用C++编译器编译代码并运行,验证功能。
调试与优化‌:根据测试结果调整代码,确保功能正确。
八、‌部署场景‌
本地开发环境‌:在本地机器上开发和测试代码。
生产环境‌:将代码集成到实际项目中,确保性能稳定。
九、‌材料链接‌
C++ STL官方文档
C++迭代器详解
十、‌总结‌

vector和list的迭代器提供了灵活的方式来访问和操作容器中的元素。vector迭代器支持随机访问,适合需要快速定位的场景;list迭代器支持双向移动,适合频繁插入/删除的场景‌。

十一、‌未来展望‌

随着C++标准的演进,迭代器的功能和性能可能会进一步优化,为开发者提供更强大的工具。同时,新的容器类型和算法也可能引入更高效的迭代器实现‌。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。