c++ vector list map
时间: 2024-12-30 21:26:09 浏览: 11
### C++ 中 `vector`、`list` 和 `map` 的使用方法与差异
#### Vector 使用方法
`vector` 是一种动态数组,能够自动调整大小。其内部存储方式为连续的内存空间。
创建并初始化一个 `vector<int>` 类型的对象:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3};
}
```
访问元素可以通过下标操作符完成,例如获取第一个元素:`vec[0]` 或者利用迭代器遍历整个容器[^1]。
#### List 使用方法
`list` 实现了一个双向链表结构,在任意位置插入或移除节点的时间复杂度都是常数级别 O(1),这使得它非常适合频繁执行此类操作的应用场景。
下面展示如何声明以及填充一个整型列表实例,并通过循环打印所有项:
```cpp
#include <iostream>
#include <list>
int main(){
std::list<char> listTwo {'A', 'B', 'C'};
auto j = listTwo.begin();
while(j != listTwo.end()){
std::cout << *j << " ";
++j;
}
}
```
此代码片段展示了从头到尾读取列表内字符的方法[^2]。
#### Map 使用方法
`map` 提供了一种键值对的数据组织形式,允许快速检索特定 key 对应 value 值的操作。默认情况下不允许重复 keys 存在;如果需要支持多条相同 key 记录,则应该选用 multimap 版本。
这里给出简单的例子来说明怎样建立和查询 string 到 int 映射关系的地图对象:
```cpp
#include <iostream>
#include <map>
#include <string>
int main(){
std::map<std::string,int> ageMap;
ageMap["Tom"] = 28;
ageMap["Jerry"] = 27;
for(const auto& pair : ageMap){
std::cout<<pair.first<<" is "<<pair.second<<"\n";
}
}
```
这段程序会输出每个人名及其对应的年龄信息[^3]。
#### 容器之间的主要差别
- **性能特点**
- `vector`: 支持随机存取,适合于大量追加/覆盖写入而不改变长度的情况。
- `list`: 插入删除效率高,但不便于直接定位某个具体索引处的内容。
- `map`: 查找速度快,适用于按照唯一标识码高效匹配记录的任务。
- **内存布局**
- `vector`: 连续分配的一片区域。
- `list`: 非连续分布的节点链接而成。
- `map`: 内部采用红黑树或其他平衡二叉搜索树实现以保持有序性.
阅读全文