一、动态数组(Vector)
定义和初始化:
vector<int> v1; // 创建一个空的动态数组
vector<int> v2(10); // 创建一个空间为10的动态数组,元素默认值为0
vector<int> v3(5,3); // 创建一个空间为5的动态数组,元素默认值为3
vector<int> v4(v3); // 创建一个动态数组,其内容拷贝v3
int a[100] = {1,2,3,4,5,6,7,8,9,10};
vector<int> v5(a, a+5); // 拷贝数组a[0]~a[4]的元素到动态数组v5中
操作方法
v1.push_back(x) // 在动态数组v1最后添加一个元素x
v1.pop_back() // 删除动态数组v1最后一个元素
v1.front() // 访问(获取)动态数组v1第一个元素
v1.back() // 访问(获取)动态数组v1最后一个元素
v1.erase(x) // 删除指定位置的元素,x是一个迭代器
// 在v1的末尾添加v2的所有元素
v1.instert(v1.end(), v2.begin(), v2.end())
v1.begin() // 获取动态数组第一个元素的迭代器
v1.end()-1 // 获取动态数组最后一个元素的迭代器
v1.size() // 获取动态数组中的元素个数
v1.empty() // 判空
v1.clear() // 清空动态数组
二、集合(Set)
定义和初始化
set<int> s1; // 创建一个空的集合
set<int> s2(s1); // 创建一个集合,其内容拷贝s3
int a[100] = {5,6,1,3,1,5,1,4,6,1};
set<int, greater<int> > s3(a, a+10); // 创建一个集合,把[0,9]的元素放到其中
操作方法
s1.insert(x) // 往集合中添加一个元素
s1.find(x) // 查找元素x是否出现过,找到就返回对应的迭代器,否则返回end()
s1.erase(x) // 删除集合中的x元素,之间传入值即可
s1.size() // 获取动态数组中的元素个数
s1.empty() // 判空
s1.clear() // 清空动态数组
三、哈希表(Map)
定义和初始化
map<string, int> mp; // 第一个类型为键的类型,第二个类型为值的类型
操作方法
mp.insert({k,v}) // 往哈希表里面添加一个键值对
mp.find(x) // 查找键x是否出现过,找到就返回对应的迭代器,否则返回end()
mp.count(x) // 统计键x出现了几次,因为键只会出现1次,所以只会返回0或1
mp.erase(x) // 删除键 x
四、迭代器 & 容器遍历
迭代器定义
// 容器类型 ::iterator 迭代器变量;
vector<int>::iterator it1;
set<int>::iterator it2;
map<string, int>::iterator it3;
三种容器遍历方法
迭代器遍历
vector<int>::iterator it;
for( it=v.begin(); it!=v.end(); it++){
cout<<*(it)<<" ";
}
auto : 自动类型
for(auto it=v.begin(); it!=v.end(); it++){
cout<<*(it)<<" ";
}
C++新特性
for(auto i: v){
cout<<i<<" ";
}