内容会持续更新,有错误的地方欢迎指正,谢谢!
STL的容器分为顺序容器和关联容器。容器适配器是对这两类容器进行包装得到的有更强约束力的容器。
容器适配器
stack
stack是一种容器适配器,常被用于先进后出、逆序输出的情景。stack没有迭代器,将特定的容器作为其底层,如deque,list,vector…
empty() //堆栈为空则返回真
pop() //移除栈顶元素
push() //在栈顶增加元素
size() //返回栈中元素数目
top() //返回栈顶元素
queue
queue也是容器适配器,但有迭代器
push(x)//将x压入队列的末端
pop()//弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值
empty()//当队列为空时,返回true
size()//返回队列的长度
front()//返回第一个元素(队顶元素)
back()//返回最后被压入的元素(队尾元素)
顺序容器的通用概念
迭代器
迭代器的定义举例(以vector为例):vector<int>::iterator iter=vec.begin();
开始指针:vec.begin();
末尾指针:vec.end(); //指向最后一个元素的下一个位置
指向常量的开始指针: vec.cbegin(); //不能通过此指针修改所指的内容,但可通过其他方式。
指向常量的末尾指针: vec.cend();
元素的访问
下标访问: vec[1];
访问第一个元素: vec.front();
访问最后一个元素: vec.back();
顺序容器用法
vector
push_back() //在Vector最后添加一个元素
empty() //Vector为空返回true
size() //返回Vector元素数量的大小
front() //返回第一个元素
back() //返回最后一个元素
begin() //返回第一个元素的迭代器
end() //返回最后一个元素的下一个元素的迭代器
clear() //清空所有元素
//从一个vector容器pre中拷贝其部分元素到新vector容器leftPre中
vector<int> leftPre(pre.begin()+1,pre.begin()+i+1);
vector<vector<int>> result;//用vector表示二维数组,该如何使用?请见下方:
vector<int> temp;//要声明一个一维vector<int>
temp.push_back(pNode->val);
result.push_back(temp);
//错误的用法:
result[row].push_back(pNode->val);//二维vector容器,不能这样用!
//正确的用法:
result[i][j]
deque
push_front(elem)//在头部插入一个数据
push_back(elem)//在尾部加入一个数据
pop_front()//删除头部数据
pop_back()//删除最后一个数据
empty() //如果队列空则返回真
size() //返回队列中元素的个数
front() //返回第一个元素
back() //返回最后一个元素
string
C++ string和’\0’没有半分钱的关系, 不会被截断。 string是个容器,所以,根本不用担心’\0’
比如:string str="abcd"; int length=str.size();
其中,length就等于4,而不是5
一般通过索引来使用string。