前情回顾
上章中,我掌握了string类的使用,第二个石碑也倒下,但是后面还是一座石碑…
🚄上章地址:第九层(2):STL之string类
vrctor类
“看来后面还会有很多石碑,我明白那个人为什么说东西很多了,这一层的石碑比前面八层合起来石碑应该还要多…"
vrctor类的功能
vector的数据结构和数组非常相似,被称为单端数组
vector与普通数组的区别
普通数组申请的是静态空间,而vector的空间可以动态扩展1
vector的迭代器
vector的迭代器是支持随机访问的迭代器
vector类内的构造函数
vector类内的构造函数可以用于创建一个vector的容器,也可以对其进行初始化的操作
vector<T> v;//采用模板实现,默认构造函数 vector(v.begin(),v.end());//将v.begin()到v.end()之间的元素拷贝给本身 vector(int n , T elem);//将n个elem拷贝给本身 vector(const vector &v);//将v的数据拷贝给本身
使用:
#include<vector> #include<iostream> using namespace std; void print(vector<int>& v) { for (vector<int>::iterator b=v.begin(); b < v.end(); b++) { cout << *b << " "; } cout << endl; } void test1() { vector<int> v; for (int i = 0; i < 10; i++) { v.push_back(i); } print(v); vector<int> v1(v.begin(), v.end()); print(v1); vector<int> v2(10, 0); print(v2); vector<int> v3(v2); print(v3); } int main() { test1(); return 0; }
vector类内的赋值操作
vector类内的赋值,其实相当于拷贝的操作,类内提供了三种方法:
vector& operator=(const vector &v);//操作符重载,将v的数据拷贝到本身 assign(beg,end);//这里的beg和end是迭代器,这个函数可以将[beg,end)之间的数据拷贝到本身 assign(int n, T elem);//拷贝n个elem到本身
#include<vector> #include<iostream> using namespace std; void print(vector<int>& v) { for (vector<int>::iterator b=v.begin(); b < v.end(); b++) { cout << *b << " "; } cout << endl; } void test1() { vector<int> v(10, 1); print(v); vector<int> v1 = v; print(v1); vector<int>v2(v1.begin(), v1.end()); print(v2); } int main() { test1(); return 0; }
vector类内对容器和大小操作
vector是一个类似于数组的东西,那它在某一个时间段的大小和容器容量可以去进行计算吗?可以,C++在vector类内封装了一些函数用于操作容器和
大小
empty();//判断容器是否为空,为空返回真 capacity();//返回容器当前容量 size();//返回容器中的元素个数 resize(int num);//可以重新指定容器的容量,容量为num,若容器变长,则变长的部分全部补0,若变短,则将超出的部分全部删除 reszie(int num,T elem);//可以重新指定容器的容量,容量为num,若容器变长,则变长的部分全部补elem,若变短,则将超出的部分全部删除
使用:
#include<vector> #include<iostream> using namespace std; void print(vector<int>& v) { for (vector<int>::iterator b=v.begin(); b < v.end(); b++) { cout << *b << " "; } cout << endl; } void test1() { vector<int> v; if (v.empty()) { cout << "为空" << endl; } for (int i = 0; i < 10; i++) { v.push_back(i); } print(v); cout << v.capacity() << endl; cout << v.size() << endl; v.resize(15); print(v); v.resize(20, 1); print(v); } int main() { test1(); return 0; }
vector类内的插入操作
vector类中于string类一样,同样拥有插入函数:
push_back(T ele);//从尾部插入元素ele insert(const_iterator pos,T ele);//在迭代器pos指向位置插入元素ele insert(const_iterator pos,int count,T ele);//在迭代器pos指向位置插入count个元素ele
使用:
#include<vector> #include<iostream> using namespace std; void print(vector<int>& v) { for (vector<int>::iterator b=v.begin(); b < v.end(); b++) { cout << *b << " "; } cout << endl; } void test1() { vector<int> v; v.insert(v.begin(), 1); print(v); v.insert(v.begin(), 9, 2); print(v); } int main() { test1(); return 0; }