C++的STL
1. Vector
vector容器可以储存任何元素
拥有基本的容器操作
2.List链表
特点:双向循环列表,每个节点有两个指针,分别指向上一个和下一个元素
list常用方法:
添加:
push_back:从后添加元素
push_front:从前添加元素
insert(pos,n,elem):(地址,个数,数据)
删除:
eraser:删除元素
remove:删除等于该值的所有元素
clear:删除所有元素
size:返回大小
empty:判断是否为空
resize:重新定义List长度、重新定义的长度比之前的小,就会数据丢失
assign:拷贝
swap:交换
reverse:翻转list、 翻转之后元素的顺序也会改变,和倒序不同
sort:倒排序
3. Map
特点:元素根据KEY值自动排序,Map所有元素都是pair队组,KEY值不能相同,但是multimap可以拥有相同的KEY值
四种初始化方式:
map<int,int> m;
/* 四种初始化方式 */
m.insert(pair<int,int>(1,10));
m.insert(make_pair(2,20)); //推荐
m.insert(map<const int,int>::value_type(3,30));
m[4] = 40;
//遍历
for(map<int,int>::iterator it = m.begin(); it != m.end(); it++){
cout << "key: " << it->first << " value: " << it->second << endl;
}
查找:
court:返回元素个数
find:返回的是迭代器
lower_bound(KEY):返回第一个KEY >= KEYelem元素的迭代器
upper_bound(KEY):返回第一个KEY > KEYelem元素的迭代器
equal_range:返回容器中KEY值与keyElem相等的上下限的两个迭代器(相当于上面两个之和
4. Set
特点:关联式容器,KEY值就是Value值,不允许修改和含有重复的值、二叉树,没有开头和结尾,插入用insert()
插入重复的值:插入重复的值会返回false的pair<iterator,bool>
void test02(void){
set<int> s;
pair<set<int>::iterator,bool> c;
//第一次插入10
c = s.insert(10);
if(c.second == true){
cout << "插入数据成功" << endl;
}else{cout << "插入数据失败" << endl;}
//第二次插入10
c = s.insert(10);
if(c.second == true){
cout << "插入数据成功" << endl;
}else{cout << "插入数据失败" << endl;}
}
指定排序规则利用的是仿函数:
class myCompare{
public:
//重载函数
bool operator()(int v1,int v2){
return v1 > v2; //这里指定排序规则
}
};
void test03(void){
set<int,myCompare> s;
s.insert(5);
s.insert(1);
s.insert(7);
s.insert(3);
s.insert(9);
for(set<int,myCompare>::iterator it = s.begin(); it != s.end(); it++){
cout << *it;
} //这里会倒序输出
cout << endl;
}
插入自定义数据类型:上来就要指定好排序规则
/* 案例:自定义数据类型 */
class Person{
public:
Person(string name,int age){
this->name = name;
this->age = age;
}
string name;
int age;
};
class myComparePerson{
public:
bool operator()(const Person &p1, const Person &p2){
if(p1.age > p2.age){ //从大到小
return true;
}else{return false;}
}
};
void test04(void){
set<Person,myComparePerson> s;
Person p1("大娃",100);
Person p2("二娃",20);
Person p3("爷爷",1000);
s.insert(p1);
s.insert(p2);
s.insert(p3);
for(set<Person,myComparePerson>::iterator it = s.begin(); it != s.end(); it++){
cout << "姓名:" << (*it).name << " 年龄:" << it->age << endl;
}
cout << endl;
}
5. Stack
特点:先进后出,只有开头的元素能访问,不能遍历
头元素(top())、加入(push())、拿出(pop())
6. Queue
特点:先进先出,只有开头的元素能访问,不能遍历
7. Deque
特点:双开口的容器
replace:替换
compare:比较
resize(num,elem):重新指定长度,变长就用elem去掉多余的内存
8. Pair
特点:队组,不用头文件,两种创造方式
pair<string,int> p(string("Aoce"),23);
pair<string,int> p = make_pair(string("aoce"),23);