vector
有迭代器 可随机访问
vector<int> x; int t;
vector初始化:
vector<int>a(10);
vector<int>a(10,1);
vector<int>a(b); //b为vector
vector<int>a(b.begin(),b.begin+3); //b为vector
int b[7]={1,2,3,4,5,6,7};
vector<int> a(b,b+7);
1. x.push_back(t); //把t插入到x的尾部
2. x.pop(); // 删除x的最后一个元素
3. x,empty(); // x是否为空 是返回true 否返回flase
4. x.clear(); //清空x
5. x.size(); //x的长度(元素个数)
6. x.begin(); //返回第一个元素的迭代器
x.end(); //返回最后一个元素下一个位置的迭代器
即二者是一个前闭后开区间
7. x.front() //返回x的第一个元素
x.back() //返回x的最后一个元素
8. x.erase(x.begin(),x.begin()+3); //删除区间[x.begin(),x.begin()+3)的元素
9. a.swap(b); //将a中的元素和b中的元素整体交换
10. reverse(s2.begin(),s2.end());//逆序字符串
string
有迭代器 可随机访问
string x ,y; char c;
1. x==y // 可直接进行比较操作 ( 等价于strcmp(x,y)==0 ? )
2. s+=c // 可通过’+’ 连接两个串,或者给一个串加上一个字符
3. x=y // 复制y给x 类似strcpy
4. x.find(y) // 返回字符串y在x中的位置,如果没有找到,则返回-1
5. x.length() x.size() // 求该串的长度
6. clear() empty() 与vector类似
7. insert( pos,char ) //在指定位置pos前插入字符char
8. push_back( char ) //尾插一个字符
9. erase( iterator p ) //删除p所指字符
10. replace(size_t pos, size_t n, const char *s ) //将当前字符串从pos下标位置开始的n个字符替换成字符串s
11. sort(s.begin(),s.end()) //排序
set & multiset
有迭代器 不可随机访问 自动按ASCII码排序
set --> 有序集合 不重复 //类比数学中集合的互斥性
multiset --> 多重有序集合 即可重复
set<int> x ; multiset<int> y ; int t;
1. x.insert(t) //插入一个元素 二者用法相同
2. x.find(t) //查询t是否存在 存在则返回指向该元素的迭代器 否则 返回x.end()
3. x.count(t) //返回元素t的个数
4. clear() size() empty() x.begin() x.end() 与vector类似
5. max_size()
6. rbegin() rend()
例题:
安迪的第一个字典
输入一个文本,找出所有不同的单词(连续的字母序列),按字典序从小到大输出。单词不区分大小写。
样例输入:
Adventures in Disneyland
Two blondes were going to Disneyland when they came to a fork in theroad. The sign read: “Disneyland Left.”
So they went home.
样例输出:(部分)
A
Adventures
Blondes
Came
Disneyland
实现代码:
#include<bits/stdc++.h>
using namespace std;
set<string> dict;
int main(){
string s,buf;
while(cin>>s)
{
for(int i=0;i<s.length();i++)
if(isalpha(s[i]))
s[i]=tolower(s[i]);
else
s[i]=' ';
stringstream ss(s);
while(ss>>buf) dict.insert(buf);
}
for(set<string>::iterator it=dict.begin();it!=dict.end();++it)
cout<<*it<<"\n";
return 0;
}
stack —> 先入后出
没有迭代器 不可随机访问
stack<int> x ; int t ;
1. x.push(t) ; //向栈顶插入t 注意: 尾部叫做栈顶
2. x.pop(t) ; //删除栈顶元素
3. size() empty() 与vector类似 但没有clear() 操作
4. top() //获得栈顶元素
queue —>先入先出 (循环队列)
没有迭代器 不可随机访问
queue<int> x ; int t;
1. x.front() //返回队头元素
2. x.pop() //将队头弹出 即删除最先进入的元素
3. x.push(t) //将t插入队尾
4. x.back() //返回队尾元素
5. size() empty() 与vector类似 但没有clear() 操作
6. full() //判断队列是否满了
Map
有迭代器 可随机访问
map<string,int> x; string s;
1. size() /empty() /clear() /begin() /end()均与set类似
2. x.find(s) //查询x中是否存在以s位键值的元组,没有则返回 x.end() 有则返回该元组的迭代器
3. x.count(s) //查询x中以s为键值的元组个数,实际只有1和0
5. erase() 删除一个元素
迭代器可以类比数组指针理解 可用auto代替