介绍c++ STL中关于vector,stack,queue,set, string的常用操作
目录
一.vector
vector<int> v;v.size(); //大小
v.empty(); //为空返回true
v.push_back(val); //末尾添加元素
v.pop_back(); //末尾删除元素
v.insert(v.begin(),val);//在最前面插入新元素。
v.insert(v.begin()+2,val);//在迭代器中第二个元素前插入新元素
v.insert(v.end(),val);//在向量末尾追加新元素。
v.erase(v.begin());//删除第一个元素
v.erase(v.begin()+n); //删除第n+1个元素
v.erase(v.begin() + 1, v.begin() + 3);//删除v.begin() + 1和v.begin() + 2两个元素
v.begin(); //指向第一个元素
v.end(); //指向最后一个元素的下一个位置
v.front(); //第一个元素
v.back(); //最后一个元素
lower_bound(v.begin(), v.end(), t) //返回第一个大于或等于t的元素位置
upper_bound(v.begin(), v.end(), t) //返回第一个大于t的元素位置
//找vector中的最大值与最小值以及其下标
#include <iostream>
#include <string>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v(4, 0);
for(int i = 0; i <= 3; ++i)
{
v[i] = i;
}
vector<int>::iterator m = max_element(v.begin(), v.end()); //最小值用min_element(v.begin(), v.end());
cout << *m << distance(v.begin(), m) << endl;
return 0;
}
//vector二维数组大小初始化
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
/*
int m, n;
cin >> m >> n;
vector<vector<int> > vv(m, vector<int>(n));
for(int i = 0; i < vv.size(); ++i)
{
for(int j = 0; j < vv[i].size(); ++j)
{
cout << vv[i][j];
}
cout << endl;
}
*/
int m;
cin >> m;
vector<vector<int> > vv(m);
for(int i = 0; i < vv.size(); ++i)
{
vv[i].resize(i+1);
}
for(int i = 0; i < vv.size(); ++i)
{
for(int j = 0; j < vv[i].size(); ++j)
{
cout << vv[i][j];
}
cout << endl;
}
return 0;
}
二.stack
stack<int> s;
s.empty(); //判断栈是否为空,如果是空,返回true
s.size(); //返回栈中元素的个数
s.top(); //取栈顶元素,返回栈顶元素
s.push(val) //压栈,无返回值
s.pop(); //退栈,无返回值
三.queue
queue<int> q;
q.empty(); //如果队列空则返回真
q.size(); //返回队列中元素的个数
q.front(); //第一个元素
q.back(); //最后一个元素
q.pop(); //删除第一个元素
q.push(val); //在末尾加入一个元素
//优先队列,操作和普通queue类似
//建立堆的时间复杂度是O(n), 删除堆顶元素的时间复杂度是O(logn)
priority_queue<int> q;
q.top() //访问队头元素
q.push(val) //插入元素到队尾 (并排序)
q.emplace(val); //原地构造一个元素插入队尾
//双端队列
deque<int> q;
q.push_back(val); //在尾部添加一个数据
q.push_front(val); //在头部插入一个数据
q.pop_back(); //删除最后一个数据
q.pop_front(); //删除容器第一个数据
q.front(); //返回第一个数据。
q.back(); //返回最后一个数据
四.set
//每个元素最多只出现一次,并且set中的元素已经从小到大排好序。
set<int> s;
s.begin(); //返回第一个元素的地址
s.end(); //返回最后一个元素的下一个地址
s.clear(); //删除所有的元素
s.empty(); //判断是否为空
s.max_size(); //返回包含的元素最大个数
s.size(); //返回当前元素个数
s.erase(it); //删除迭代器指针it处元素
s.insert(a); //插入某个元素
s.rbegin() //返回一个逆序迭代器,它指向容器的最后一个元素
s.rend() //返回一个逆序迭代器,它指向容器的第一个元素前面的位置
s.lower_bound(t) //返回第一个大于或等于t的元素位置
s.upper_bound(t) //返回第一个大于t的元素位置
五. string
string s = "123456";
//string的常见用法和vector类似, 比如s.front(), s.back(), s.push_back(c), s.pop_back()
int int_s = stoi(s); //stirng to int
s = to_string(int_s); //int to string;
pos = s.find("3", 5) //从下标5开始查找字符串"3"的下标,找不到返回string::npos或者写作s.npos
sub_s = s.substr(1, 2) //返回从下标1开始长度为2的字符,这里得到字符串"23"
//分割字符串
//方法一
while((npos = s.find(" ", pos)) != s.npos){
vs.push_back(s.substr(pos, npos-pos));
pos = npos+1;
}
vs.push_back(s.substr(pos, s.size()-pos));
//方法二
istringstream strs(s);
vector<string> words;
string word;
while(strs>>word){
words.push_back(word);
}
六. list
list<int> li;
li.push_front(val); //首部添加元素
li.push_back(val); //尾部添加元素
li.pop_front(); //删除头部元素
li.pop_back(); //删除尾部元素
li.erase(); //删除第一个元素
li.remove(val); //删除val元素
li.begin(); //首部迭代器
li.end(); //尾部迭代器
li.front(); //首部元素
li.back(); //尾部元素
参考:https://blog.youkuaiyun.com/lskyne/article/details/10418823
六. map