# C++ STL之容器技术 **Repository Path**: dapeng15042435737/container ## Basic Information - **Project Name**: C++ STL之容器技术 - **Description**: 本文是对C++的标准模板库中的容器技术的讨论和总结,希望对小伙伴有帮助。 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-12-18 - **Last Updated**: 2023-04-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # C++ STL之容器技术 ## 介绍 本文是对C++的标准模板库中的容器技术的讨论和总结,希望对小伙伴有帮助。 ## map容器 map容器属于关联式容器。存储的是一个键值对,对于存储的内容支持排序的。不支持key重复写入,也就是说它的key是不能重复的。 ```C++ #include #include using namespace std; int main(){ map mp; // 向map添加数据 mp.insert(pair(2134, "长城")); mp.insert(pair(1424, "吉利")); // 另外一种添加方法 mp.insert(map::value_type(3142, "奇瑞")); // 下标法添加数据 mp[1111] = "红旗"; // 添加一个key重复的键值对 mp.insert(pair(2134, "日产")); cout << "----------- 下标法访问map里的数据 ------------" << endl; cout << mp[3142] << endl; cout << "----------- 迭代器法访问map里的数据 ------------" << endl; map::iterator it; it = mp.begin(); while (it != mp.end()) { cout << it->first << it->second << endl; it++; } } ``` 运行结果 ![输入图片说明](map.png) ## set容器 set容器属于序列式容器。存储的各种类型的数据,对于存储的内容支持排序的。不支持数据重复写入,也就是说它的数据是不能重复的。 ```C++ #include #include using namespace std; int main(){ // 定义一个set对象; set s; // 向set里添加数据 s.insert(50); s.insert(20); s.insert(30); s.insert(40); // 向set里添加重复数据 s.insert(30); // 从set里取得数据 cout << "----------- 迭代器法访问set里的数据 ------------" << endl; set::iterator it; it = s.begin(); while (it != s.end()) { cout << *it << endl; it++; } return 0; } ``` 运行结果 ![输入图片说明](set.png) ## vector容器 vector容器属于序列式容器, 本质上讲就是一个可变长的数组,它的存储空间是连续的,如果当前的空间不够了,会自动开辟2倍当前的空间,把原来的数据整体拷贝过来,删除原来的空间。 **存储的数据可以重复。** ```c++ #include #include using namespace std; int main(){ // 声明一个int型的Vector vector ve; // 向Vector容器添加1,2,3,4,2 ve.push_back(1); ve.push_back(2); ve.push_back(3); ve.push_back(4); // 向Vector容器添加重复的数据 ve.push_back(2); // 使用下标法取得Vector里的值 (和数组的方式一样) cout << ve[0] << endl; cout << ve[1] << endl; cout << ve[2] << endl; cout << ve[3] << endl; cout << ve[4] << endl; cout << "--------- 迭代器 ----------" << endl; // 声明一个迭代器 vector::iterator it; // 返回Vector的头索引 it = ve.begin(); // 利用迭代器开始遍历整个Vector while (it != ve.end()) { cout << *it << endl; printf("%p\n", it); it++; } cout << "--------- Vector的大小 ----------" << endl; cout << ve.size() << endl; cout << "--------- 判断Vector是否为空 ----------" << endl; cout << ve.empty() << endl; cout << "--------- 当前向量所能容纳的最大元素值 ----------" << endl; cout << ve.capacity() << endl; cout << "--------- 最大可允许的vector元素数量值 ----------" << endl; cout << ve.max_size() << endl; // 删除Vector的最后一个数据 ve.pop_back(); cout << "--------- Vector的大小 ----------" << endl; cout << ve.size() << endl; cout << "--------- 判断Vector是否为空 ----------" << endl; cout << ve.empty() << endl; cout << "--------- 当前向量所能容纳的最大元素值 ----------" << endl; cout << ve.capacity() << endl; // 清空所有数据 ve.clear(); cout << "--------- Vector的大小 ----------" << endl; cout << ve.size() << endl; cout << "--------- 判断Vector是否为空 ----------" << endl; cout << ve.empty() << endl; cout << "--------- 当前向量所能容纳的最大元素值 ----------" << endl; cout << ve.capacity() << endl; } ``` 结果 ![输入图片说明](vector.png)