//list知识点:
{
list<int> list1;
int num1 = 3, num2 = 5;
int length = 0;
int sum = 0;
list1.push_back(num1);//在list的后面插入;
list1.push_front(num2);//在list的前面插入;
list1.sort();//这个函数用于对列表进行升序排序;
list1.unique();//去除列表中的重复信息;
length = list1.size();
sum = accumulate(list1.begin(),list2.end(),0);//函数accumulate包含在头文件#include<numeric>中
//迭代器
list<int>::iterator max_ele_addr;
list<int>::iterator min_ele_addr;
max_ele_addr = max_element(list1.begin(),list1.end());//获取到列表中最大值的位置;
min_ele_addr = min_element(list1.begin(),list1.end());//获取到列表中最小值的位置;
cout<<*max_ele_addr<<endl;//星号表示解锁迭代器的值;
//反向迭代器
list<int>::reverse_iterator riter;
for(riter = list1.rbegin(); riter != list1.rend(); riter++)
{
cout<<*riter<<'\t';
}
}
//STL排序:
{
int a[20] = {};
sort(a,a+20);//也是STL中的排序,存在于#include<algorithm>中;
//实现降序
bool compare(int a, int b)
{
return a>b;
}
sort(a, a+20, compare);
//STL自己的排序函数:
sort(begin,end,greater<int>());//这里,begin表示存储信息的首位置,end表示存储信息的尾位置。
//less<type>() <
//less_equal<type>() <=
//greater_equal<type>() >=
//sort在头文件algorithm中,greater等在头文件functional中。
}
//new的用法:
{
int howmany = 3;
int *num = new int[howmany];
for(int iter = 0; iter < howmany; iter++)
cin>>num[iter];
delete []num;
}
//vector的用法:
{
int num = 5;
string str;
//vector定量初始化以及插入;
vector<string> vec1(num,"");//开辟有num个存储空间的向量vec1,并对每个存储空间进行初始化;
vector<string>::iterator vec1_iter = vec1.begin();//向量迭代器;
for(int iter = 0; iter < num; iter++)
{
cin>>str;
vec1.insert(vec1_iter+iter,str);//在迭代器vec1_iter+iter的位置插入值str;
}
//vector不定量初始化
vector<string> vec2;
cout<<vec2.size()<<endl;//vec2的存储尺度为0,但是可以动态变化;
for(int iter = 0; iter < num; iter++)
{
cin>>str;
vec2.push_back(str);
}
//迭代器输出
for(vector<string>::iterator vec2_iter = vec2.begin(); vec2_iter != vec2.end(); vec2.iter++)
{
cout<<*vec2_iter<<"\t";
}
//索引输出
for(int iter = 0; iter < num; iter++)
{
cout<<vec2[iter]<<"\t";
cout<<vec2.at(iter)<<endl;//这是at()函数;
}
//二维向量:
int size1 = 5;
int size2 = 6;
string str;
vector<vector<string> > Array(size1,vector<string>(size2,""));//定义二维向量,尺度为size1*size2,并初始化所有元素为"";
vector<vector<string> > Array(size1,vector<string>(size2));//定义二维向量,尺度为size1*size2;
for(int iter_dim1 = 0; iter_dim1 < size1; iter_dim1++)
for(int iter_dim2 = 0; iter_dim2 < size2; iter_dim2++)
{
cin>>str;
Array[iter_dim1].push_back(str);
}
//注:二维向量如果确定了维度,并初始化,则不应用push_back(),而应该用=赋值,这样保证其尺度不变。
//定义二维向量,不确定维度;
vector<vector<int> >vv;
for(int c = 1; c <= 3; c++)
vv.push_back(vector<int>(c,0));//每个第一维插入由c个0构成的一维向量
//也可以后续设置维度size1*size2
vv.resize(size1);
for(int iter_dim1 = 0; iter_dim1 < size1; iter_dim1++)
vv[iter_dim1].resize(size2);
//定义第一维为size1的二维向量;
vector<vector<int> > vv(size1);//定义了一个有mode行的二维向量
//定义二维向量,并且元素全部初始化为零:
vector<vector<int> > Array(size1,vector<int>(size2,0));
//向量清空:
vec1.clear();
Array.clear();
//释放内存:
vector<string>().swap(vec1);
vector<vector<int> >().swap(Array);
//vector内容更新:
vector<int>::iterator new_add = vec1.erase(vec1.begin());//删除vec1第一个位置上的内容,返回下一个位置的地址。
//也可以删除一个区间内的内容
//vector<int>::iterator new_add = vec1.erase(vec1.begin(),vec1.begin()+10);//删除区间的内容,返回删除后下一个位置的地址。
//删除后更新内容:
vector<int>(vec1).swap(vec1);
//构造空二维向量:
vector<int> singe_vec;
vector<vector<int> > double_vec;
double_vec.push_back(singe_vec);
//一维向量排序:
vector<int> sort_vec;
int ele;
for(int iter = 0; iter < 10; iter++)
{
cin>>ele;
sort_vec.push_back(ele);
}
sort(sort_vec.begin(),sort_vec.end(),greater<int>());
}