小结STL之std::vector

Vector 就是一个高级的数组(不定长数组,不用担心数组大小问题)

1.Vector的创建

  包含头文件 #include<vector> // 每个stl都需要对应的头文件

  然后命名空间是std 即 using std::vector //或者定义所有 using namespace std:

 

//第一种:不传参数
vector<int> vint;
vector<char> vchar;
vector<string> vstring;

//注意这个用法:开一个大小为5 每个值为默认值的vector
//第二种:传一个参数 相当于开辟了一个数组 vector<int> vint2(5); vector<char> vchar2(5); vector<string> vstring2(5); //第三种:参数一 n个元素,每个元素的初值 开辟数组并进行初始化 vector<int> vint3(5,0); vector<char> vchar3(5,'a'); vector<string> vstring3(5,"a"); //第四种:传一段迭代器区间 vector<int> vint4(vint3.begin(),vint3.end()); vector<char> vchar4(vchar3.begin(),vchar3.end()); vector<string> vstring4(vstring3.begin(),vstring3.end()); //第五种:传一个对象,既拷贝函数 vector<int> vint5(vint3); vector<char> vchar5(vchar3); vector<string> vstring5(vstring3); //第六种:赋值运算符的重载 vector<int> vint6; vector<char> vchar6; vector<string> vstring6; vint6=vint5; vchar6=vchar5; vstring6=vstring5;

2.vector的迭代器iterator的定义

  也可以直接用auto

//迭代器定义
//begin() end() rbegin() rend() 正向和反向迭代器
std::vector<int>::iterator itint=vint6.begin();                                                                                                        
std::vector<char>::iterator itchar=vchar6.begin();
std::vector<string>::iterator itstring=vstring.end();
itint =vint6.end();
itchar = vchar.end();
itstring=vstring.end();
std::vector<int>::reverse_iterator ritint =vint6.rbegin();
std::vector<char>::reverse_iterator ritchar = vchar.rbegin();
std::vector<string>::reverse_iterator ritstring=vstring.rbegin();
ritint = vint6.rend();
ritchar = vchar6.rend();
ritstring=vstring.rend();

//cbegin() cend() crbegin() crend() const正向和反向迭代器
std::vector<int>::const_iterator citint=vint6.cbegin();
std::vector<char>::const_iterator citchar=vchar6.cbegin();
std::vector<string>::const_iterator citstring=vstring6.cbegin();
citint=vint6.cend();
citchar=vchar6.cend();
citstring=vstring.cend();
//const_reverse 的迭代器
std::vector<int>::const_reverse_iterator critint;
std::vector<char>::const_reverse_iterator critchar;
std::vector<string>::const_reverse_iterator critstring;
critint=vint6.crbegin();
critchar=vchar6.crbegin();
critstring=vstring6.crbegin();
critint=vint6.crend();
critchar=vchar6.crend();
critstring=vstring6.crend();

3.有关size的操作

//用来描述大小的一系列函数
vector<int> test(5,1);
cout<<test.size()<<endl;//表示顺序表的元素个数
cout<<test.capacity()<<endl;//表示顺序表的容量
cout<<test.max_size()<<endl;//表示容器的最大存储,但实际到不了
test.resize(1);//设置大小,可以开辟出更多的空间,当参数小于时就销毁空间
test.resize(10,2);//当大于时就开辟并初始化
cout<<test.size()<<endl;
test.empty();//用来检查是否为空
test.reserve(10);//用来设置容器大小但是并不初始化,元素个数也没变,变化不可见
test.shrink_to_fit();//将容器的大小收缩至于元素个数相同的大小

4.有关元素的操作

//关于元素存取的函数
//operator[] 既重载[]使其类似于数组元素的操纵,实现随机访问
cout<<test.at(1)<<endl;//类似于[]的作用,只是是一个函数行形式
cout<<test.front()<<endl;//显示存在的第一个元素
cout<<test.back()<<endl;//显示存在的最后一个元素
int* p = test.data();//取到了一个指向顺序表的一个指针
cout<<test.front()<<endl;//显示存在的第一个元素

//修改动作函数
test.assign(arr,arr+3);//assign替换函数可以替换一个对象的区间或者一个同类型的数组
test.push_back(4);//尾插,并没有头插
test.pop_back();//尾删                                                                                                                                        
test.insert(it,5);//插入指定位置
test.erase(it);//删除指定位置
test.swap(test1);//交换函数,将两个对象进行交换
test.clear();//清空整个顺序表
vector<int>::iterator it2=test.emplace(it,5);//类似于insert但是会返回新插入元的迭代器
test.emplace_back(10);//类似于尾插

猜你喜欢

转载自www.cnblogs.com/zhanghengyu/p/10895893.html