●vector基本概念
功能:
■vector数据结构和数组非常相似,也称为单端数组
vector与普通数组的区别:
■不同之处在于数组是静态空间,而vector可以动态扩展
动态扩展:
■并不是在原空间空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间
●vector的构造函数
函数原型:
■vector<T> v //采用模板实现类实现,默认构造函数
■vector(v.begin(),v.end()) //将v[ begin(),end() )区间中的元素拷贝给本身
■vector(n,elem) //构造函数将n个elem拷贝给本身
■vector(const vector &vec) //拷贝构造函数
#include<iostream> #include<vector> //vector容器头文件声明 using namespace std; void printvector(vector<int>&v) { for(vector<int>::iterator i=v.begin();i!=v.end();i++) //迭代器输出容器内的数值 { cout << *i << " "; } cout << endl; } void text() { //默认构造 无参构造 vector<int> v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } printvector(v1); //通过区间方式进行构造 vector<int>v2(v1.begin(), v1.end()); printvector(v2); //n个elem方式构造 vector<int>v3(10, 1); printvector(v3); //拷贝构造 vector<int>v4(v3); printvector(v4); } int main() { text(); }
●vector赋值操作
函数原型:
■vector& operator=(const vector &vec) //重载等号操作符
■assign(begin,end) //将[ begain,end)区间中的数据拷贝赋值给自己
■assign(n,elem) //将n个elem拷贝赋值给自己
#include<iostream> #include<vector> using namespace std; void printvector(vector<int>&v) { for(vector<int>::iterator i=v.begin();i!=v.end();i++) { cout << *i << " "; } cout << endl; } void text() { vector<int> v1; //创建构造容器 for (int i = 0; i < 10; i++) { v1.push_back(i); } vector<int>v2=v1; printvector(v2); vector<int>v3; v3.assign(v1.begin(), v1.end()); printvector(v3); vector<int>v4; v4.assign(10, 1); printvector(v4); } int main() { text(); }
●vector容量和大小
函数原型:
■empty() //判断容器是否为空
■capacity() //容器的容量
■size() //返回容器中元素的个数
■resize(int num) //重新指定容器的长度为num,若容器变长,则以默认值填充新位置(如果容器变短,则末尾超出容器长度的元素被删除)
■resize(int num,elem) //重新指定容器的长度为num,若容器变长,则以elem值填充新位置(如果容器变短,则末尾超出容器长度的元素被删除)
#include<iostream> #include<vector> using namespace std; void printvector(vector<int>&v) //输出容器中内容 { for(vector<int>::iterator i=v.begin();i!=v.end();i++) { cout << *i << " "; } cout << endl; } void capacityvector(vector<int>& v) //判断容器的容量 { cout << "v的容量为:" << v.capacity() << endl; } void sizevector(vector<int>& v) //判断容器的大小 { cout << "v的大小为:" << v.size() << endl; } void isemptyvector(vector<int>& v) //判断容器是否为空 { if (v.empty()) { cout << "v为空" << endl; } else { cout << "v不为空" << endl; //③确定v不为空后,并且求出容器的容量 capacityvector(v); //④确定v不为空后,并且求出容器的大小 sizevector(v); } } void resizevector(vector<int>& v) //对容器进行重新填充 { //⑥默认填充为0,我们这里指定填充为10(扩容填充/也可以对容器进行缩短) v.resize(20,10); //⑦再次输出容器中的内容 printvector(v); } void text() { vector<int> v; //创建构造容器 for (int i = 0; i < 10; i++) { v.push_back(i); } //①先输出容器中的内容 printvector(v); //②判断v1是否为空 isemptyvector(v); //⑤重新指定大小 resizevector(v); } int main() { text(); }
●vector插入和删除
函数原型:
■push_back(ele) //尾部插入元素ele
■pop_back() //删除最后一个元素
■insert(const_iterator pos,ele) //迭代器指向位置pos插入元素ele
■insert(const_iterator pos,int count,ele) //迭代器指向位置pos插入count个元素ele
■erase(const_iterator pos) //删除迭代器指向的元素
■erase(const_iterator start,const_iterator end) //删除迭代器从start到end之间的元素
■clear() //删除容器中所有元素
#include<iostream> #include<vector> using namespace std; void printvector(vector<int>&v) { for(vector<int>::iterator i=v.begin();i!=v.end();i++) { cout << *i << " "; } cout << endl; } void text() { vector<int>v1; //尾插 v1.push_back(1); v1.push_back(2); v1.push_back(3); v1.push_back(4); printvector(v1); //尾删 v1.pop_back(); printvector(v1); //插入 v1.insert(v1.begin(), 0); printvector(v1); //v1.insert(v1.begin(), 0, 5); //printvector(v1); // //删除 v1.erase(v1.begin()); printvector(v1); //删除整个容器 //v1.erase(v1.begin(), v1.end()); v1.clear(); printvector(v1); } int main() { text(); }
●vector数据存取
函数原型:
■at(int idx) //返回索引idx所指的数据
■operator[ ] //返回索引idx所指的数据
■front() //返回容器中第一个数据元素
■back() //返回容器中最后一个数据元素
#include<iostream> #include<vector> using namespace std; void text() { vector<int>v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } //利用[ ]方式访问数组中元素 for (int i = 0; i < v1.size(); i++) { cout << v1[i] << " "; } cout << endl; //利用at方式去访问数组中的元素 for (int i = 0; i < v1.size(); i++) { cout << v1. at(i)<<" "; } cout << endl; //访问第一个元素 cout << "第一个元素:" << v1.front() << endl; //访问最后一个元素 cout << "最后一个元素:" << v1.back() << endl; } int main() { text(); }
●vector互换容器
函数原型:
■swap(vec) //将vec与本身的元素互换
#include<iostream> #include<vector> using namespace std; void printvector(vector<int>&v) { for(vector<int>::iterator i=v.begin();i!=v.end();i++) { cout << *i << " "; } cout << endl; } void swapvector(vector<int>&v1,vector<int>&v2) { v1.swap(v2); } void text() { vector<int>v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } vector<int>v2; for (int i = 10; i < 20; i++) { v2.push_back(i); } cout << "交换前" << endl; printvector(v1); printvector(v2); cout << "交换后" << endl; swapvector(v1, v2); printvector(v1); printvector(v2); } int main() { text(); }
● vector预留空间
功能:
■减少vector在动态扩展容量时的扩展次数
函数原型:
■reserve(int len) //容器预留len个元素长度,预留位置不初始化,元素不可访问
#include<iostream> #include<vector> using namespace std; void text() { vector<int>v; v.reserve(1000); //一次性开辟1000个位置,不需要动态多次开辟 for (int i = 0; i < 1000; i++) { v.push_back(i); } //下面进行检查,如果是是动态分配位置的容量和大小不相同,如果一次性开辟了固定大小空间,则下面二者相同 cout << "容器的容量:" << v.capacity() << endl; cout << "容器的大小:" << v.size() << endl; } int main() { text(); }