//#include "stdafx.h"
//#pragma warning(disable:4996)
#include <iostream>
#include <vector>
using namespace std;
int i = 0;
vector <int> v;
void set()
{
for (i = 0; i < 10; i++)
v.push_back(i); //在数组的最后添加一个数据
//若v[i] = i;需vector <int> v(10);《分配内存》
}
void get(vector <int> &v_tem)
{
for (i = 0; i < v_tem.size(); i++) //size()返回容器中实际数据的个数
cout << v_tem[i] << " ";
cout << endl << endl;
}
void judge()
{
if (!v.empty()) //判断容器是否为空
cout << "该容器不为空" << endl; //不为空empty()返回0
else
cout << "该容器为空" << endl;
}
void func1()
{
cout << "在尾部加入一个数据11" << endl;
v.push_back(11); //在尾部加入一个数据11
get(v);
cout << "得到编号2位置的数据(v[2])" << endl;
cout << v.at(2) << endl << endl;
cout << "v.insert(it,n,e)//在it指向元素的前面添加n个元素e" << endl;
v.insert(v.end(), 2, 22); //相当于在尾部添加2个22
v.insert(v.begin(), 3, 33); //在头部添加3个33
get(v);
cout << "v.insert(it,beg,end)//在it指向元素的前面添加迭代器[beg,end)范围内的元素" << endl;
vector <int> v3 = { 99, 99 };
v.insert(v.begin(), v3.begin(), v3.end()); //end()是第三位,99后面的一位
get(v);
cout << "v.insert(it,li)在it所指的元素的前面添加一个列表li" << endl;
v.insert(v.end(), { 3,4,5 });
get(v);
vector <int> v2(20, 0); // 定义一个容纳20个int型数据的容器,初值赋为0
cout << "交换容器v,v2中的数据" << endl;
swap(v, v2);
cout << "v2:" << endl;
for (i = 0; i < v2.size(); i++)
cout << v2[i] << " ";
cout << endl;
cout << "v:" << endl;
for (i = 0; i < v.size(); i++)
cout << v[i] << " ";
cout << endl << endl;
judge(); //判断容器是否为空
v.clear(); //移除容器中所有数据
judge(); //判断容器是否为空
cout << endl;
set();
cout << "修改头和尾" << endl;
v.front() = 1;//0变成1
v.back() = 10;//9变成10
get(v);
}
//vector的添加修改删除
void func2()
{
cout << "头部元素:" << v.front() << endl;
cout << "尾部元素:" << v.back() << endl;
cout << "删除最后一个数据" << endl;
v.pop_back(); //删除最后一个数据
get(v);
cout << "修改头部与尾部值:" << endl;
v.front() = 11;
v.back() = 22;
get(v);
cout << "删除指定区间元素[1, 2):" << endl;
v.erase(v.begin() + 1, v.begin() + 2);
get(v);
cout << "删除指定元素begin():" << endl;
v.erase(v.begin());
get(v);
v[0] = 2, v[1] = 2;
get(v);
cout << "删除指定值元素2:" << endl;
for (vector<int>::iterator it = v.begin(); it != v.end();)
{
if (*it == 2)
it = v.erase(it); //删除元素后迭代器自动后移,it接受为下一位元素地址
else
it++;
}
get(v);
//v.resize(num);
//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
//v.resize(num, elem);
//重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
}
//vector的初始化
void func3()
{
vector <int> v2 = v;
cout << "v2:" << endl;
get(v2);
vector <int> v3(v.begin(), v.begin() + 2);
cout << "v3:" << endl;
get(v3);
vector <int> v4(10, 2); //10个2
cout << "v4:" << endl;
get(v4);
vector <int> v5(10);
v5.push_back(1);
cout << "v5:" << endl;
get(v5);
int iArray[] = { 0,1,2,3,4 };
vector<int> vecIntA(iArray, iArray + 2);
cout << "从iArray数组中copy 2个元素" << endl;
get(vecIntA);
}
//迭代器]
void func4()
{
cout << "正向遍历:" << endl;
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl << "逆向遍历:" << endl;
for (vector<int>::reverse_iterator it = v.rbegin(); it != v.rend(); it++)
{
cout << *it << " ";
}
}
int main()
{
cout << "v:" << endl;
set();
get(v);
//func1();
func2();
//func3();
//func4();
cout << endl;
system("pause");
return 0;
}