容器算法迭代器
vector
头文件
#include <vector>
定义
vector<typename> name;
typename :可以是任何基本类型;int、double、char、结构体、STL容器(vector、set...)
vector<vector<int**>****>** name;
name.begin():取name的首元素地址
name.end():取尾元素地址的下一个地址
vector<typename> name; //创建空的vector
vector<typename> name(N) //N为默认数组长度,初始值默认为0
vector<typename> name(N,value) //N为默认数组长度,初始值默认为value
给定数据:vector<int> data = {1,2,3,4,5};
vector<vector<int>> data(N1,vector<int>(N2)); //N1为行数,N2为列数,默认值为0vector<vector<int>> data(N1,vector<int>(N2,value)); //N1为行数,N2为列数,默认值为value
给定数据:vector<vector<int>> data = { {1,2,3,4,5} , {6,7,8,9,10} };
特点
相当于一维数组name[SIZE],其长度可以根据需要进行变化;可理解成变长数组
容器内元素的访问
vector<typename>::iterator it;
迭代器it,类似指针,我们通过*it来访问vector里的元素
v[i] 等价于 *(v.begin()+i)
cpp
#include <iostream>
#include <vector>
using namespace std;
void test01(){
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
//通过迭代器访问容器中的数据
//v.begin()为取v的首元素地址,而it指向这个地址
// vector<int>::iterator itBegin = v.begin();//起始迭代器,指向容器中第一个元素
// vector<int>::iterator itEnd = v.end(); //结束迭代器,指向容器中最后一个元素的下一个位置
//第一种遍历方式
// while(itBegin!=itEnd){
// cout << *itBegin <<" ";
// itBegin++;
// }
//第二种遍历方式
for(vector<int>::iterator it = v.begin() ; it!=v.end() ; it++){
cout << *it << " ";
}
}
int main(){
test01();
}
STL提供的标准遍历算法
cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void myPrint(int val){
cout<< val << " ";
}
void test01(){
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
//myPrint回调
for_each(v.begin(),v.end(),myPrint);
}
int main(){
test01();
}
vector常用函数
向容器中尾插数据x ------ push_back(x)
删除容器尾元素 ------ pop_back()
获取容器元素个数 ------ size()
清空容器中所有元素 ------ clear()
向迭代器it处插入一个元素x ------ insert(it,x)
删除迭代器it处的元素 ------ erase(it)
删除[first,last)内的所有元素 ------ erase(first,last)
容器嵌套容器
cpp
#include <iostream>
#include <vector>
using namespace std;
void test01(){
vector<vector<int>>v;
//创建小容器
vector<int>v1;
vector<int>v2;
vector<int>v3;
vector<int>v4;
//向小容器中添加数据
for(int i=0;i<4;i++){
v1.push_back(i+1);
v2.push_back(i+2);
v3.push_back(i+3);
v4.push_back(i+4);
}
//将小容器插入到大的容器中
v.push_back(v1);
v.push_back(v2);
v.push_back(v3);
v.push_back(v4);
//通过大容器,把所有数据遍历一遍
for(vector<vector<int>>::iterator it = v.begin() ; it!=v.end() ; it++){
//(*it) ------------ 容器 vector<int>
for(vector<int>::iterator vit = (*it).begin() ; vit!=(*it).end() ; vit++){
cout << *vit << " ";
}
cout << endl;
}
}
int main(){
test01();
}
(*it) ------------ 容器 vector<int>
v : v1 v2 v3 v4
String
头文件
#include <string>