vector 容器基础

//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;
}

猜你喜欢

转载自blog.csdn.net/ukston_c/article/details/80570821