C++容器list、vector、map、set全面解析与应用

版权申诉
6 下载量 133 浏览量 更新于2024-09-14 3 收藏 95KB PDF 举报
n"个elem元素的拷贝。list list是以双向链表的形式实现的,不支持随机访问,但允许在任何位置高效地插入和删除元素。它使用迭代器进行访问,通过迭代器可以向前或向后遍历列表。创建list时,不需要预先指定大小。 list对象的创建 list<数据类型>list容器名称; list<int>lstInt; // 一个存放int的list容器 list<char>lstChar; // 一个存放char的list容器 list常用操作 list.size(); // 返回容器中元素的个数 list.empty(); // 判断容器是否为空 list.push_back(1); // 在容器尾部添加一个元素 list.push_front(2); // 在容器头部添加一个元素 list.pop_back(); // 移除容器尾部的一个元素 list.pop_front(); // 移除容器头部的一个元素 list.clear(); // 清空容器的所有数据 list.erase(iter); // 删除迭代器iter指向的元素 list.splice(iter, lst2, beg, end); // 从lst2的[beg, end)区间剪切元素并插入到iter位置 list.reverse(); // 反转容器中的元素顺序 map map是一个关联容器,它存储键值对<key, value>,其中key是唯一的。它使用红黑树实现,提供O(log n)的插入和查找效率。map的元素不能被直接索引,但可以通过键来查找对应的值。 map对象的创建 map<键类型, 值类型>map容器名称; map<int, string>mymap; // 创建一个键为int,值为string的map map常用操作 map.size(); // 返回容器中元素的个数 map.empty(); // 判断容器是否为空 map.insert(pair<键类型, 值类型>(k, v)); // 插入一个键值对 map[k]; // 通过键k查找对应的值,如果不存在则自动插入并返回默认值 map.erase(k); // 删除键为k的键值对 map.find(k); // 查找键为k的迭代器,若找不到则返回end() set set也是关联容器,类似于map,但它只存储键而不存储值,键必须是唯一的。set同样基于红黑树,提供O(log n)的插入和查找效率。 set对象的创建 set<数据类型>set容器名称; set<int>myset; // 创建一个存储int的set set常用操作 set.size(); // 返回容器中元素的个数 set.empty(); // 判断容器是否为空 set.insert(k); // 插入一个元素k set.erase(k); // 删除元素k set.find(k); // 查找元素k的迭代器,若找不到则返回end() Hash 虽然没有直接提及哈希表,但在C++11中引入了unordered_map和unordered_set,它们使用哈希表实现,提供了更快的查找速度(平均O(1)),但可能因为哈希冲突而牺牲一定的性能。 unordered_map对象的创建 unordered_map<键类型, 值类型>umap容器名称; unordered_map<int, string>umymap; // 创建一个键为int,值为string的unordered_map unordered_set对象的创建 unordered_set<数据类型>uset容器名称; unordered_set<int>myuset; // 创建一个存储int的unordered_set 总结: C++中的容器list、vector、map和set分别提供了不同的数据结构和操作特性,适应不同的应用场景。list适合频繁插入和删除的操作;vector适用于快速随机访问;map和set则用于键值对的关联存储,其中set只存储键。根据实际需求选择合适的容器能显著提高代码效率。