本文共 2946 字,大约阅读时间需要 9 分钟。
一个vector 是C++中常用的动态数组,其优势在于能够以动态的方式扩展,不需要提前分配好内存。无论是整数、浮点数、字符串,还是自定义的结构体,vector都可以储存这些数据类型。
使用#include<vector>
头文件
数据类型的名称可以是任意名字,例如:
vector a;vectorb;vector c;// 定义结构体并使用struct Person { int age; string name;};vector d;
动态扩展尾部
使用a.push_back()
方法将元素添加到尾部查找当前长度
使用a.size()
获取当前元素个数修改具体位置的元素值
直接赋值a[位置] = 数值
删除最后一个元素
使用a.pop_back()
(括号内不需要添加元素)清空vector
使用a.clear()
删除所有元素判断是否为空
a.empty()
返回布尔值,表示是否无元素访问前导或末尾元素
a.front()
返回第一个元素,a.back()
返回最后一个元素迭代访问元素
使用vector::iterator
来遍历:vector a = {1, 2, 3};vector ::iterator it = a.begin();for(; it != a.end(); ) { printf("%d\n", *it); it++;}
Stack是一个先进后出(FIFO)的操作方式,栈顶始终是最last-in的元素。
使用#include<stack>
头文件
栈的命名规则为空:
stack a_stack;
获取栈中元素个数
注意:在std::栈
中,大多数操作要比std::queue
更复杂,需要手动管理个数判断栈是否为空
使用a_stack.empty()
,返回true
或false
将元素压入栈顶
使用a_stack.push()
方法返回栈顶元素
使用a_stack.top()
弹出栈顶元素
使用a_stack.pop()
需要注意的是,std::栈
没有直接的迭代器可用,遍历需要借助指针或索引
Map是根据键-值对存储数据的容器,默认支持自定义的排序和比较方式
使用#include<map>
头文件
map的键值对可以用任意数据类型,例如:
mapa_map;map b_map;// 结构体作为键或值struct Point { int x; int y;};map c_map;
获取map的起始和结束迭代器
auto it = a_map.begin();a_map.end();
清空map中所有元素
a_map.clear()
查找特定键值对
使用a_map.count(key)
,返回对应键的出现次数判断是否为空
a_map.empty()
插入或修改键值对
使用a_map.insert()
(有重复键值会选择覆盖)或a_map[键] = 值
删除特定键值对
使用a_map.erase()
,可以带参数或不带参数(根据键值对被删除)查找特定键值对的位置
使用a_map.find(key)
,返回迭代器对象交换两个map
使用swap()
函数或交换()
方法计算元素个数
a_map.size()
遍历map
for (auto it = a_map.begin(); it != a_map.end(); ++it) { // it.first是键,it.second是值 cout << it.first << " -> " << it.second << endl;}
Set是具有去重、排序功能的高级集合,默认按从小到大的顺序存储元素
使用#include<set>
头文件
set的名称规则为空:
seta_set;set b_set;
插入元素
a_set.insert();
,无需判断元素是否存在返回第一个或最后一个元素
使用a_set.begin()
和a_set.end()
判断是否为空
a_set.empty()
清空所有元素
a_set.clear()
查找特定元素的位置
a_set.find(key)
维度:elements.size()`
删除特定元素
a_set.erase(key)
(或单个元素)集合的唯一性
for (auto it = a_set.begin(); it != a_set.end(); ++it) { cout << *it << endl;}
Queue是一个先进先出(FIFO)的操作方式,队首元素第一被读取,队尾元素最后被插入
使用#include<queue>
头文件
队列命名规则为空:
queue a_queue;
将元素加入队列尾部
a_queue.push();
读取队首或队尾元素
a_queue.front()
和a_queue.back()
移除元素
a_queue.pop()
移除队首元素判断是否为空
a_queue.empty()
返回布尔值获取队列长度
a_queue.size()
需要注意的是,std::队列
没有直接的迭代器,可通过 указ指针或索引方法访问队列数据
优先队列是一种基于堆结构的容器,它默认按照小到大的顺序排序,并取到最大或最小的元素
定义优先队列:
priority_queue a_hp;priority_queue
读取堆中的最大值
a_hp.top()
移除堆顶元素
a_hp.pop()
其他操作与普通队列一致,依次为:
优先队列与普通队列不同之处在于,它内部总是保持高度有序,因此在查找堆顶元素时效率更高。
以上是C++中常用容器的定义和基本操作总结。对于新手来说,建议从简单的vector
和栈
开始学习,逐步理解容器的特性和适用场景。在开发过程中,根据具体需求选择合适的容器可以优化代码性能和可读性。在写代码时,请注意遵循正确的命名规范,方便团队协作和项目维护。
转载地址:http://ltagz.baihongyu.com/