c++的vector和其他STL
抄自c++ primer
vector是一个类模板
vector
vector
上面这两种写法等价,v2是包含v1所有元素的副本
二维vector的声明:
vector <vector(T)> v;
初始化
vector<string> v1{"a","an","the"};
创建10个1
vector<int> v2(10,1)
花括号和括号是不等价的
vector<int> v1(10) //有10个默认的0
vector<int> v(10,1) //有10个值为1的元素
vector<int> v1{10} //有个值为0的元素
//如果花括号里面值和vector<T>的T不同,编译器用尝试用默认值初始化
vector<string> v2{10,"hi"}
vector<string> v3(10,"hi")
遍历:
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << endl;
}
常用的api
v.size() 获取v的大小
v.push_back(t) 末尾添加一个元素
v.empty() 判断v是否为空
vector不能用下标添加元素,插入元素用.insert();
v.insert(v.begin() + 1, 3);
其他STL
栈(后进先出):
stack<int> mystack;
s.top(); //返回栈顶元素, 但不删除该元素
s.pop(); //弹出栈顶元素, 但不返回其值
s.push(); //添加元素到栈顶
队列(先进先出):
q.back() //返回最后一个元素
q.front() //返回第一个元素
q.push() //队尾插入元素
q.pop() //队头移除一个元素
Map:
unordered_map<char,char> myMap={
//右-左
{')','('},
{']','['},
{'}','{'}
};
map<string, int> myMap;
myMap.insert(pair<string,int>("hello",1) );
myMap.insert(pair<string, int>("world", 2));
myMap.insert(pair<string, int>("you", 3));
myMap.erase("hello");
//遍历map 使用迭代器
for (map<string, int>::iterator it = myMap.begin(); it != myMap.end(); it++) {
cout << "key=" << it->first << " value=" << it->second << endl;
}
map<char, char> m = {
{'a','m'},
{'b','n'},
{'c','l'}
};
deque 允许使用常数项时间在头部插入或删除元素