// vector 是将元素置于一个动态数组中加以管理的容器。
vector 可以随机存取元素(支持索引值直接存取, 用[]操作符或 at()方法, 这个等下
会详讲)。
vector 尾部添加或移除元素非常快速。 但是在中部或头部插入元素或移除元素比较费时
#include"iostream"
#include"vector"
using namespace std;
/*初始化*/
int main01()
{
//无参数 vector<T>vecT
std::vector<int>();
std::vector<float>vec_a1;
std::vector<string>vec_a;//尖括号内可以是基本类型和自定义类型
//带参数
std::vector<int>(3,9);//存放3个9, vector(int size, const T&t);
int a[] = { 1, 2, 3, 4, 5 };
vector<int>vec_a2(a, a + 4);
vector<int>vec_a3(vec_a2.begin(), vec_a2.end());
vector<int>vec_a4(vec_a2.begin(), vec_a2.begin() + 3);
vector<int>vec_a5(vec_a2);
//copy构造函数
//vector<int>(const vector &t);
return 0;
}
/赋值(数组,插入)及遍历(数组)(引用)(迭代器)/
/*
vector.assign(beg,end); //将[beg, end)区间中的数据拷贝赋值给本身。 注意该区间
是左闭右开的区间。
vector.assign(n,elem); //将 n 个 elem 拷贝赋值给本身。
vector& operator=(const vector &vec); //重载等号操作符
vector.swap(vec); // 将 vec 与本身的元素互换。
*/
int main02()
{
int a[5] = { 1, 2, 3, 4, 5 };
vector<int>vec_a1 (a, a + 5);
vector<int>vec_a2(3, 9);//9,9,9
vec_a2 = vec_a1;
cout << "vec_a2: ";
for (int i = 0; i < vec_a1.size(); i++) //通过数组方式遍历1
{
cout << vec_a2[i] << " "; //1,2,3,4,5
}
cout << endl;
vector<int>vec_a3(vec_a1.begin(), vec_a1.end());//区间赋值
cout << "数组遍历1: ";
for (int i = 0; i < vec_a1.size(); i++) //通过数组方式遍历1
{
cout << vec_a1[i] << " "; //1,2,3,4,5
}
cout << endl;
cout << "引用遍历2: ";
for (int i = 0; i < vec_a1.size(); i++) //通过引用方式遍历2
{
int &vec = vec_a1.at(i);
cout << vec << " "; //1,2,3,4,5
}
cout << endl;
cout << "迭代器遍历3: ";
vector<int>::iterator it = vec_a1.begin();
while(it!=vec_a1.end())//通过引用方式遍历2
{
cout << *it<< " "; //1,2,3,4,5
it++;
}
cout << endl;
return 0;
}
//*大小,头部元素,尾部元素,修改头部元素*//
int main03()
{
vector<int>a1;
a1.push_back(1); //在尾部插入元素
a1.push_back(2);
a1.push_back(3);
cout << a1.size() << endl; //3 vector容器大小
a1.front() = 100; //改变头部元素
a1.back() = 0; //改变尾部元素
//a1[1] = 10; //修改第二个元素(数组1)
//int &m = a1.at(1);//修改第二个元素(引用2)
//m = 10;
vector<int>::iterator it1 = a1.begin() + 1;//修改第二个元素(迭代2)
*it1 = 50;
for (int i = 0; i < a1.size(); i++) //通过数组方式遍历1
{
cout << a1[i] << " "; //100,2,3
}
cout << endl;
a1.pop_back(); //删除尾部元素
a1.pop_back();
cout << a1.size() << endl; //1
return 0;
}
/插入与删除(eraser和insert)///
int main04()
{
//插入元素(insert)
/*理论知识
vector.insert(pos, elem); //在 pos 位置插入一个 elem 元素的拷贝, 返回新数据的位置。
vector.insert(pos, n, elem); //在 pos 位置插入 n 个 elem 数据, 无返回值。
vector.insert(pos, beg, end); //在 pos 位置插入[beg,end)区间的数据, 无返回值
*/
int a[5] = { 1, 2, 3, 4, 5 };
vector<int>vect_a1(a,a+5);
vector<int>vect_a2(3,9);//9,9,9
vect_a1.insert(vect_a1.begin (),100);//头插入//100,1, 2, 3, 4, 5
vect_a1.insert(vect_a1.end (),100); //尾插入//100,1, 2, 3, 4, 5,100
vect_a1.insert(vect_a1.begin ()+2,200);//在第三个位置插入//100,1,200, 2, 3, 4, 5,100
vect_a1.insert(vect_a1.begin(), vect_a2.begin(), vect_a2.end());//9,9,9,100,1,200, 2, 3, 4, 5,100
for (vector<int>::iterator it = vect_a1.begin(); it != vect_a1.end(); it++)
{
cout << *it << " ";
}
cout << endl;
//删除元素(erase)
/*理论知识
vector.clear(); //移除容器的所有数据
vec.erase(beg,end); //删除[beg,end)区间的数据, 返回下一个数据的位置。
vec.erase(pos); //删除 pos 位置的数据, 返回下一个数据的位置。
*/
//删除999
vect_a1.erase(vect_a1.begin(),vect_a1.begin ()+3);
for (vector<int>::iterator it = vect_a1.begin(); it != vect_a1.end(); it++)
{
cout << *it << " "; //100,1,200, 2, 3, 4, 5,100
}
cout << endl;
//删除所有的100;
for (vector<int>::iterator it = vect_a1.begin(); it != vect_a1.end();)
{
if (*it == 100)
it=vect_a1.erase(it);
else
it++;
}
for (vector<int>::iterator it1 = vect_a1.begin(); it1 != vect_a1.end(); it1++)
{
cout << *it1 << " "; //1,200, 2, 3, 4, 5
}
cout << endl;
//删除200;
vect_a1.erase(vect_a1.begin()+1);
for (vector<int>::iterator it1 = vect_a1.begin(); it1 != vect_a1.end(); it1++)
{
cout << *it1 << " "; //1, 2, 3, 4, 5
}
cout << endl;
//清空容器;
vect_a1.clear();
cout << "clear后容器大小:" << vect_a1.size() << endl;//0
return 0;
}
int main()
{
main01();//初始化
main02();//赋值(数组,插入)及遍历(数组)(引用)(迭代器)
main03();//大小,头部元素,尾部元素,修改头部元素,尾部元素
main04();//元素的插入与删除
system("pause");
return 0;
}