/*vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组。
像数组一样,vector类也用从0开始的下标表示元素的位置;但和数组不同的是,
当vector对象创建后,数组的元素个数会随着vector对象元素个数的增大和缩小而自动变化。
vector类常用的函数如下所示:
1.构造函数
vector() :创建一个空vector
vector(int nSize) : 创建一个vector, 元素个数为nSize
vector(int nSize, const t& t) : 创建一个vector,元素个数为nSize, 且值均为t
vector(const vector&) : 复制构造函数
vector(begin, end) : 复制[begin, end)区间内另一个数组的元素到vector中
2.增加函数
void push_back(const T& x) :向量尾部增加一个元素X
iterator insert(iterator it, const T& x) : 向量中迭代器指向元素前增加一个元素x
iterator insert(iterator it, int n, const T& x) : 向量中迭代器指向元素前增加n个相同的元素x
iterator insert(iterator it, const_iterator first, const_iterator last) :
向量中迭代器指向元素前插入另一个相同类型向量的[first, last)间的数据
3.删除函数
iterator erase(iterator it) :删除向量中迭代器指向元素
iterator erase(iterator first, iterator last) : 删除向量中[first, last)中元素
void pop_back() :删除向量中最后一个元素
void clear() : 清空向量中所有元素
4.遍历函数
reference at(int pos) : 返回pos位置元素的引用
reference front() : 返回首元素的引用
reference back() : 返回尾元素的引用
iterator begin() : 返回向量头指针,指向第一个元素
iterator end() : 返回向量尾指针,指向向量最后一个元素的下一个位置
reverse_iterator rbegin() : 反向迭代器,指向最后一个元素
reverse_iterator rend() : 反向迭代器,指向第一个元素之前的位置
5.判断函数
bool empty() const : 判断向量是否为空,若为空,则向量中无元素
6.大小函数
int size() const : 返回向量中元素的个数
int capacity() const : 返回当前向量张红所能容纳的最大元素值
int max_size() const : 返回最大可允许的vector元素数量值
7.其他函数
void swap(vector&) : 交换两个同类型向量的数据
void assign(int n, const T& x) : 设置向量中第n个元素的值为x
void assign(const_iterator first, const_iterator last) : 向量中[first, last)中元素设置成当前向量元素
*/
#include <iostream>
#include <vector>
using namespace std;
int main()
{
//1.构造函数初始化
//int型vector,包含3个元素
vector<int> vecIntA(3);
//int型vector,包含3个元素且每个元素都是9
vector<int> vecIntB(3, 9);
//复制vecIntB到vecIntC
vector<int> vecIntC(vecIntB);
int iArray[] = { 2, 4, 6 };
//创建vecIntD
vector<int> vecIntD(iArray, iArray + 3);
//打印vectorA,此处也可以用下面注释内的代码来输出vector中的数据
cout << "vecIntA:" << endl;
for (int i = 0; i<vecIntA.size(); i++)
{
cout << vecIntA[i] << " ";
}
cout << endl;
for (vector<int>::iterator it = vecIntA.begin(); it != vecIntA.end(); it++)
{
cout << *it << " ";
}
cout << endl;
//打印vecIntB
cout << "VecIntB:" << endl;
for (vector<int>::iterator it = vecIntB.begin(); it != vecIntB.end(); it++)
{
cout << *it << " ";
}
cout << endl;
//打印vecIntC
cout << "VecIntB:" << endl;
for (vector<int>::iterator it = vecIntC.begin(); it != vecIntC.end(); it++)
{
cout << *it << " ";
}
cout << endl;
//打印vecIntD
cout << "vecIntD:" << endl;
for (vector<int>::iterator it = vecIntD.begin(); it != vecIntD.end(); it++)
{
cout << *it << " ";
}
cout << endl;
//2.增加和获得元素
//int型vector,包含3个元素
vector<int> vecIntE;
//插入1 2 3
vecIntE.push_back(1);
vecIntE.push_back(2);
vecIntE.push_back(3);
int nSize = vecIntD.size();
cout << "vecIntE:" << endl;
//打印vectorE,方法一:
for (int i = 0; i<nSize; i++)
{
cout << vecIntE[i] << " ";
}
cout << endl;
//打印vectorE,方法二:
for (int i = 0; i<nSize; i++)
{
cout << vecIntE.at(i) << " ";
}
cout << endl;
//打印vectorE,方法三:
for (vector<int>::iterator it = vecIntE.begin(); it != vecIntE.end(); it++)
{
cout << *it << " ";
}
cout << endl;
//3.修改元素示例,修改元素的方法主要有三种:1.通过数组修改,2.通过引用修改,3.通过迭代器修改
//int型vector,包含3个元素
vector<int> vecIntF;
//插入1 2 3
vecIntF.push_back(1);
vecIntF.push_back(2);
vecIntF.push_back(3);
//int nSize = vecIntF.size();
//通过引用修改vector
cout << "通过数组修改,第二个元素为8:" << endl;
vecIntF[1] = 8;
cout << "vecIntF:" << endl;
//打印vectorF
for (vector<int>::iterator it = vecIntF.begin(); it != vecIntF.end(); it++)
{
cout << *it << " ";
}
cout << endl;
//通过引用修改vector
cout << "通过引用修改,第二个元素为18:" << endl;
int &m = vecIntF.at(1);
m = 18;
cout << "vecIntF:" << endl;
//打印vectorF
for (vector<int>::iterator it = vecIntF.begin(); it != vecIntF.end(); it++)
{
cout << *it << " ";
}
cout << endl;
//通过迭代器修改vector
cout << "通过迭代器修改,第二个元素为28" << endl;
vector<int>::iterator itr = vecIntF.begin() + 1;
*itr = 28;
cout << "vecIntF:" << endl;
//打印vectorF
for (vector<int>::iterator it = vecIntF.begin(); it != vecIntF.end(); it++)
{
cout << *it << " ";
}
cout << endl;
//4.删除向量示例,删除向量主要通过erase和pop_back,示例代码如下
//int型vector,包含3个元素
vector<int> vecIntG;
//循环插入1 到10
for (int i = 1; i <= 10; i++)
{
vecIntG.push_back(i);
}
vecIntG.erase(vecIntG.begin() + 4);
cout << "删除第5个元素后的向量vecIntG:" << endl;
//打印vectorG
for (vector<int>::iterator it = vecIntG.begin(); it != vecIntG.end(); it++)
{
cout << *it << "\t";
}
cout << endl;
//删除第2-5个元素
vecIntG.erase(vecIntG.begin() + 1, vecIntG.begin() + 5);
cout << "删除第2-5个元素后的vecIntG:" << endl;
//打印vectorG
for (vector<int>::iterator it = vecIntG.begin(); it != vecIntG.end(); it++)
{
cout << *it << "\t";
}
cout << endl;
//删除最后一个元素
vecIntG.pop_back();
cout << "删除最后一个元素后的vecIntG:" << endl;
//打印vectorG
for (vector<int>::iterator it = vecIntG.begin(); it != vecIntG.end(); it++)
{
cout << *it << "\t";
}
cout << endl;
//其他操作
system("pause");
return 0;
}