STL学习(二)——array的使用

it2022-05-05  196

在STL学习(一)中说了STL的大致组成部件,在了解了STL的组成之后,可以知道容器是STL最根本的东西,没有容器,迭代器和算法都无用武之地。所以,从本章开始,我将细细的说说我这段时间学到的STL的知识,本章,我就说说我最先认识的第一个容器——array。

array方法及作用列表:

array方法 方法作用fill使用某个值填充数组。swap交换两个等大的数组的内容。begin两个版本(const和非const),返回指向数组起始位置的迭代器。end两个版本(const和非const),返回指向数组终止位置的迭代器。rbegin两个版本(const和非const),返回指向数组反向起始位置的迭代器。rend两个版本(const和非const),返回指向数组反向终止位置的迭代器。cbegin返回指向数组起始位置的常量迭代器,不能通过该迭代器修改数据,与begin的常量版本采用相同的实现。cend返回指向数组终止位置的常量迭代器,不能通过该迭代器修改数据,与end的常量版本采用相同的实现。crbegin返回指向数组反向起始位置的常量迭代器,不能通过该迭代器修改数据,与rbegin的常量版本采用相同的实现。crend返回指向数组反向终止位置的常量迭代器,不能通过该迭代器修改数据,与rend的常量版本采用相同的实现。size返回数组的大小。max_size返回数组的大小。empty返回该数组是否为空,空,返回true,否则,返回false。[]两个版本(const和非const),重载[]运算符,获取对应下标的元素。at两个版本(const和非const),获取对应下标的元素,只不过该方法比[]多做了检查数组下标是否越界的操作。front两个版本(const和非const),返回第一个元素。back两个版本(const和非const),返回最后一个元素。data两个版本(const和非const),返回数组的第一个元素的地址。

例子:

#include <iostream> #include <array> #include <string> using namespace std; void PrintELement(string tip,array<int,5> arr) { cout<<tip<<endl; for(int i=0;i<arr.size();i++) { cout<<arr[0]<<"\t"; } cout<<endl; } int main() { array<int,5> arr1; array<int,5> arr2; //fill arr1.fill(1); arr2.fill(2); const array<int,5> arr3=arr2; PrintELement("arr1:(fill)",arr1); PrintELement("arr2:(fill)",arr2); PrintELement("arr3:",arr3); //swap arr1.swap(arr2); PrintELement("arr1:(swap)",arr1); PrintELement("arr2:(swap)",arr2); //begin,end cout<<"begin,end:"<<endl; cout<<"arr1:"<<endl; for(auto it=arr1.begin();it!=arr1.end();it++) { cout<<*it<<"\t"; *it=3; } cout<<endl; cout<<"在循环中修改迭代器的值后:"<<endl; PrintELement("arr1:",arr1); cout<<"常量类型的迭代器不能用来修改值"<<endl; //size cout<<"arr1的大小:"<<arr1.size()<<endl; //max_size() cout<<"arr1的max_size:"<<arr1.max_size()<<endl; //empty cout<<"arr1是否为空数组:"<<arr1.empty()<<endl; //[]和at cout<<"获取arr1第1个元素的值:"<<arr1[0]<<endl; cout<<"获取arr1最后一个元素的值(第5个):"<<arr1.at(4)<<endl; cout<<"修改arr1第1个元素的值:"; arr1[0]=4; cout<<arr1[0]<<endl; cout<<"修改arr1最后一个元素的值(第5个):"; arr1.at(4)=4; cout<<arr1.at(4)<<endl; //front,back cout<<"获取arr1第一个元素的值:"<<arr1.front()<<endl; cout<<"获取arr1最后一个元素的值:"<<arr1.back()<<endl; cout<<"修改arr1第一个元素的值:"; arr1.front()=5; cout<<arr1.front()<<endl; cout<<"修改arr1最后一个元素的值:"; arr1.back()=5; cout<<arr1.back()<<endl; //data cout<<"data的使用:"<<endl; auto data=arr1.data(); for(int i=0;i<5;i++) { cout<<data[i]<<"\t"; } cout<<endl; return 0; }

运行结果:

arr1:(fill) 1    1    1    1    1     arr2:(fill) 2    2    2    2    2     arr3: 2    2    2    2    2     arr1:(swap) 2    2    2    2    2     arr2:(swap) 1    1    1    1    1     begin,end: arr1: 2    2    2    2    2     在循环中修改迭代器的值后: arr1: 3    3    3    3    3     常量类型的迭代器不能用来修改值 arr1的大小:5 arr1的max_size:5 arr1是否为空数组:0 获取arr1第1个元素的值:3 获取arr1最后一个元素的值(第5个):3 修改arr1第1个元素的值:4 修改arr1最后一个元素的值(第5个):4 获取arr1第一个元素的值:4 获取arr1最后一个元素的值:4 修改arr1第一个元素的值:5 修改arr1最后一个元素的值:5 data的使用: 5    3    3    3    5   


最新回复(0)