- UID
- 2
- 积分
- 2892617
- 威望
- 1396340 布
- 龙e币
- 1496277 刀
- 在线时间
- 13326 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-12-25
|
容器
容器是用来存储数据的序列,它们提供了不同的存储方式和访问模式。
STL 中的容器可以分为三类:
1、序列容器:存储元素的序列,允许双向遍历。
std::vector:动态数组,支持快速随机访问。
std::deque:双端队列,支持快速插入和删除。
std::list:链表,支持快速插入和删除,但不支持随机访问。
2、关联容器:存储键值对,每个元素都有一个键(key)和一个值(value),并且通过键来组织元素。
std::set:集合,不允许重复元素。
std::multiset:多重集合,允许多个元素具有相同的键。
std::map:映射,每个键映射到一个值。
std::multimap:多重映射,允许多个键映射到相同的值。
3、无序容器(C++11 引入):哈希表,支持快速的查找、插入和删除。
std::unordered_set:无序集合。
std::unordered_multiset:无序多重集合。
std::unordered_map:无序映射。
std::unordered_multimap:无序多重映射。
下面的程序演示了向量容器(一个 C++ 标准的模板),它与数组十分相似,唯一不同的是,向量在需要扩展大小的时候,会自动处理它自己的存储需求:
实例- #include <iostream>
- #include <vector>
- using namespace std;
-
- int main()
- {
- // 创建一个向量存储 int
- vector<int> vec;
- int i;
-
- // 显示 vec 的原始大小
- cout << "vector size = " << vec.size() << endl;
-
- // 推入 5 个值到向量中
- for(i = 0; i < 5; i++){
- vec.push_back(i);
- }
-
- // 显示 vec 扩展后的大小
- cout << "extended vector size = " << vec.size() << endl;
-
- // 访问向量中的 5 个值
- for(i = 0; i < 5; i++){
- cout << "value of vec [" << i << "] = " << vec[i] << endl;
- }
-
- // 使用迭代器 iterator 访问值
- vector<int>::iterator v = vec.begin();
- while( v != vec.end()) {
- cout << "value of v = " << *v << endl;
- v++;
- }
-
- return 0;
- }
复制代码 当上面的代码被编译和执行时,它会产生下列结果:- vector size = 0
- extended vector size = 5
- value of vec [0] = 0
- value of vec [1] = 1
- value of vec [2] = 2
- value of vec [3] = 3
- value of vec [4] = 4
- value of v = 0
- value of v = 1
- value of v = 2
- value of v = 3
- value of v = 4
复制代码 关于上面实例中所使用的各种函数,有几点要注意:
push_back( ) 成员函数在向量的末尾插入值,如果有必要会扩展向量的大小。
size( ) 函数显示向量的大小。
begin( ) 函数返回一个指向向量开头的迭代器。
end( ) 函数返回一个指向向量末尾的迭代器。
STL 是 C++ 编程中不可或缺的一部分,它极大地扩展了 C++ 的功能,使得程序员能够编写出更加高效、可读性更强的代码。
掌握 STL 的使用对于任何 C++ 程序员来说都是非常重要的。 |
|