C++编程:迭代器遍历与随机访问vector
需积分: 0 67 浏览量
更新于2024-08-19
收藏 571KB PPT 举报
本篇资源主要介绍了C++语言中的基本数据结构vector及其在程序设计中的应用,特别是针对遍历和查找操作。vector是C++标准库中的动态数组容器,它支持随机访问,使得在编程中能够高效地处理数据。
首先,我们来了解vector的基本概念:
1. **什么是vector**:vector是一种动态数组,它提供了类似数组的随机访问功能,同时允许在内存空间允许的情况下自动扩展或缩小大小。由于其内部实现,插入和删除元素在尾部的速度非常快,但在中间插入则相对较慢。
**创建与操作**:
- **创建**:可以使用`vector<T>`来声明一个类型为T的vector容器,如`vector<int> v;`。创建时可以选择初始化,如`vector<int> v(5);`创建一个初始容量为5的整数vector。
- **插入**:vector提供了两个常用的插入方法:
- `insert()`函数可以在指定位置插入元素,如`v.insert(v.begin(), value);`
- `push_back()`用于在vector末尾追加元素,如`v.push_back(value);`
- **删除**:vector支持在指定位置删除元素,例如`v.erase(position);`。此外,也可以使用迭代器配合`remove()`和`erase()`进行批量删除。
**遍历与查找**:
- **迭代器遍历**:通过`vector<int>::iterator`类型的变量,我们可以使用`begin()`和`end()`方法获取vector的起始和结束迭代器,然后通过`++`操作符逐个访问元素,如`for(vector<int>::iterator it = v.begin(); it != v.end(); ++it) { ... }`
- **随机访问**:由于vector是随机访问容器,可以直接通过索引访问元素,如`cout << v[3];`
- **查找**:C++中的`find()`函数用于在vector中查找指定值,如`vector<int>::iterator result = find(v.begin(), v.end(), 3);`,如果找到则返回该元素的迭代器,否则返回`end()`。
**排序**:
- **sort()函数**:C++的`sort()`函数用于对容器进行排序,使用它时需要包含头文件`#include<algorithm>`。默认情况下,`sort()`对向量进行升序排序,如果需要自定义排序规则,可以提供一个比较函数,如本例中的`MyComp()`函数,它用于根据字符串中'1'的个数进行排序。
**示例代码**:
```cpp
bool MyComp(const string& s1, const string& s2) {
int c1 = count(s1.begin(), s1.end(), '1');
int c2 = count(s2.begin(), s2.end(), '1');
return c1 != c2 ? c1 < c2 : s1 < s2;
}
int main() {
vector<string> vstr;
string str;
while (cin >> str) {
vstr.push_back(str);
}
sort(vstr.begin(), vstr.end(), MyComp);
// 排序后的输出...
}
```
总结来说,这篇教程深入讲解了如何在C++中使用vector进行创建、插入、删除操作,并演示了迭代器遍历、随机访问以及自定义排序功能。这对于理解和实践C++编程尤其有益,尤其是在处理动态数据结构时。
2009-02-09 上传
2024-04-17 上传
2008-09-08 上传
2019-07-10 上传
2021-08-10 上传
2021-08-10 上传
2010-05-01 上传
2022-10-06 上传
2020-02-28 上传
花香九月
- 粉丝: 28
- 资源: 2万+
最新资源
- protel99se的PCB常用封装库(包括USB和可变电阻和三极管等常用的封装)
- VC++ 使用MFC ODBC访问数据库
- cocos-jsc-endecryptor:适用于 Cocos 的 JSC 加解密工具
- MySQL学习仓库。Cover basic and advanced knowledge of MySQL. Lis.zip
- Team-2-Shopping-Cart-Project
- guess-next::crystal_ball:演示应用程序,显示Guess.js与Next.js的集成
- redis-test:在 Scala 中试用 Redis
- TechDegree-Project-7:游戏节目应用
- 交换两幅图像的相位谱.zip
- www.barcastanie.bc:Barcastanie的官方网站
- VC++使用OpenGL实现绘制三维图形
- 敏捷性:Javascript MVC为“少写,多做”的程序员
- apache:安装 Apache 网络服务器
- 2-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习
- react-app4517010552055412
- modelStudio::round_pushpin:用于解释模型分析的Interactive Studio