STL
#include <vector>
#include <algorithm>
void MyPrint(int val)
{
cout << val << endl;
}
void test01() {
//创建vector容器对象,并且通过模板参数指定容器中存放的数据的类型
vector<int> v;
//向容器中放数据
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
//每一个容器都有自己的迭代器,迭代器是用来遍历容器中的元素
//v.begin()返回迭代器,这个迭代器指向容器中第一个数据
//v.end()返回迭代器,这个迭代器指向容器元素的最后一个元素的下一个位置
//vector<int>::iterator 拿到vector<int>这种容器的迭代器类型
vector<int>::iterator pBegin = v.begin();
vector<int>::iterator pEnd = v.end();
//第一种遍历方式:
while (pBegin != pEnd) {
cout << *pBegin << endl;
pBegin++;
}
//第二种遍历方式:
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << endl;
}
cout << endl;
//第三种遍历方式:
//使用STL提供标准遍历算法 头文件 algorithm
for_each(v.begin(), v.end(), MyPrint);
}
int main() {
test01();
system("pause");
return 0;
}
Vector存放自定义数据类型
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
class Person {
public:
Person(string name, int age) {
m_Name = name;
m_Age = age;
}
string m_Name;
int m_Age;
};
void func(Person &p) {
cout << p.m_Name << p.m_Age << endl;
}
void test01() {
vector<Person> v;
Person p1("1111", 12);
Person p2("11112", 13);
v.push_back(p1);
v.push_back(p2);
for_each(v.begin(), v.end(), func);
}
int main() {
test01();
return 0;
}
Vector容器嵌套容器
相当于二维数组
string
void test01() {
string s1; //默认构造
const char* str = "hello";
string s2(str); //使用字符串初始化
string s3(s2); //拷贝构造
string s4(10, 'a');
cout << s2 << endl;
cout << s3 << endl;
cout << s4 << endl;
}
赋值
拼接
查找和替换
字符串比较
字符串存取
str[i] str.at(i)
string插入和删除
erase(1,3)1号位后删除三个
子串获取
查找获取@的位置 从0截取到@
vector
构造
赋值
容量和大小
插入和删除
v1.insert(v1.begin(),x);相当于头插
数据存取
互换容器
v1.swap(v2);
//收缩内存
vector<int>(v).swap(v); //匿名对象
相当于x(v),x是匿名对象,用v来拷贝构造 再和v交换 以压缩容量
预留空间
10w的数据要开辟三十次左右
v.reserve(100000);
直接预留
deque
构造函数
赋值
大小
插入和删除
数据存取
排序
stack
queue
list(链表)
构造函数
赋值和交换
数据存取
反转和排序
set/ multiset 容器
二叉排序树
大小和交换
不能resize
插入和删除
查找和统计
set和multiset区别
pair对组创建
set插入会返回一个对组,包含一个迭代器和一个bool类型
pair<set<int>::iterator, bool> ret = s.insert(10);
multiset只返回一个迭代器
pair对组创建
set容器排序
#include <set>
class MyCompare
{
public:
bool operator()(int v1, int v2) {
return v1 > v2;
}
};
void test01()
{
set<int> s1;
s1.insert(10);
s1.insert(40);
s1.insert(20);
s1.insert(30);
s1.insert(50);
//默认从小到大
for (set<int>::iterator it = s1.begin(); it != s1.end(); it++) {
cout << *it << " ";
}
cout << endl;
//指定排序规则
set<int,MyCompare> s2;
s2.insert(10);
s2.insert(40);
s2.insert(20);
s2.insert(30);
s2.insert(50);
for (set<int, MyCompare>::iterator it = s2.begin(); it != s2.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
int main() {
test01();
system("pause");
return 0;
}
map/ multimap容器
构造
map<int,int>m; //默认构造
m.insert(pair<int, int>(1, 10));
m.insert(pair<int, int>(2, 20));
m.insert(pair<int, int>(3, 30));
大小和交换
map插入和删除
map查找和统计
map容器排序
和set一样,先设置排序规则,再插入