C++ vector基本函数实现
1.构造函数
//vector():创建一个空vector
vector a;
//vector(int nSize)`:创建一个vector,元素个数为nSize
vector a(5);
//vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
vector a(5,1);
//vector(const vector&):复制构造函数
vector b;
vector a(b);
//vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中
int b[5]={1,2,3,4,5};
vector a(b,b+5);
//二维的构造
//m行n列,初值为data
vector> a(m, vector(n, data));
2.增加函数
//void push_back(const T& x):向量尾部增加一个元素X
vector a;
a.push_back(data);
//iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x,并返回表示新插入元素位置的迭代器
vector a{1,2};
a.insert(a.begin()+1,3);//即在a[1]前加入元素3
//a={1,3,2};
//iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x,并返回表示第一个新插入元素位置的迭代器
a.insert(a.end(),2,5);//a={1,3,2,5,5},这里要注意end()返回向量尾指针,指向向量最后一个元素的下一个位置
//iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据
vector b{1,2,3,4};
vector c{5,6};
c.insert(c.begin()+1,b.begin()+1,b.end()-1);//c={5,2,3,6}
3.删除函数
//iterator erase(iterator it):删除向量中迭代器指向元素
vector a{1,2,3,4,5};
a.erase(a.begin());
//iterator erase(iterator first,iterator last):删除向量中[first,last)中元素
vector a{1,2,3,4,5};
a.erase(a.begin()+1,a.end()-1);//a={1,5}
//void pop_back()`:删除向量中最后一个元素
vector a{1,2,3,4,5};
a.pop_back();//a={1,2,3,4}
//void clear()`:清空向量中所有元素
a.clear();
4.遍历函数
//reference at(int pos):返回pos位置元素的引用
vector a{1,2,3,4};
a.at(pos);//pos可以为0-a.size()-1
//reference front():返回首元素的引用
a.front();//1
//reference back()`:返回尾元素的引用
a.back();//4
//iterator begin():返回向量头指针,指向第一个元素
vector a{1, 2, 3, 4, 5};
vector::iterator it;
it=a.begin();
cout << *it << endl;//*it=1
//iterator end():返回向量尾指针,指向向量最后一个元素的下一个位置
vector a{1, 2, 3, 4, 5};
vector::iterator it;
it=a.end()-1;
cout << *it << endl;//*it=5
//reverse_iterator rbegin():反向迭代器,指向最后一个元素
vector a{1, 2, 3, 4, 5};
vector::reverse_iterator it;
it=a.rbegin();
cout << *it << endl;//*it=5
//reverse_iterator rend()`:反向迭代器,指向第一个元素之前的位置
vector a{1, 2, 3, 4, 5};
vector::reverse_iterator it;
it=a.rend();
cout << *it << endl;//*it=1
5.判断函数
//bool empty() const:判断向量是否为空,若为空,则向量中无元素
vector a;
a.empty();//返回bool类型
//这里插一个知识点----判断数据类型
//#include
//typeid(data).name();
6.大小函数
//int size() const:返回向量中元素的个数
vector a{1,2,3,4};
a.size();//4
//int capacity() const:返回当前向量所能容纳的最大元素值
vector a{1,2,3,4,5};
a.capacity();//5
//int max_size() const:返回最大可允许的 vector 元素数量值
vector a{1,2,3,4,5};
a.max_size();//最多容纳4611686018427387903个
7.其他函数
//void swap(vector&):交换两个同类型向量的数据
vector a{1,2,3};
vector b{3,4,5,6};
a.swap(b);//a=[3,4,5,6],b=[1,2,3]
//void assign(int n,const T& x):设置向量中前n个元素的值为x
vector a{1,2,3,4,5};
a.assign(3,9);//a=[9,9,9,4,5]
//void assign(const_iterator first,const_iterator last):向量中[first,last)中元素设置成当前向量元素
vector a{1,2,3,4,5};
vector b{1,2,3};
a.assign(b.begin(),b.end()-1);