欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++ vector容器的基本操作

程序员文章站 2022-03-01 23:25:27
...

C++ vector容器的基本操作

#include <iostream>
#include <vector>
using namespace std;

	/*
	vector是将元素置于一个动态数组中加以管理的容器
	vector可随机存取元素(索引[]、at())
	vector在尾部添加或删除元素非常快速,但是在中部或头部插入或删除元素非常费时
	
	vector采用模板类实现
	容器元素的存放是按值复制完成的,必须提供复制构造函数
	*/
void printVec(vector<int>& v)
{
	for (int i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
}

int main()
{
	vector<int> v1;

	//1 数组元素的添加和删除
	cout << "length: " << v1.size() << endl;
	v1.push_back(1);//尾插
	v1.push_back(3);
	v1.push_back(7);
	cout << "v1头部元素: " << v1.front() << endl;

	//修改头部元素
	v1.front() = 10;//函数返回值当左值,故返回的是引用&
	v1.back() = 20;//修改尾部元素

	while (v1.size() > 0)
	{
		cout << "v1尾部元素: " << v1.back() << endl;
		v1.pop_back();//删除尾部元素
	}

	//2 vector的初始化
	int iArray[] = { 0,1,2,3,4 };
	//将[begin, end)区间中的元素拷贝给本身,区间左闭右开
	vector<int> vecIntA(iArray, iArray + 5);

	vector<int> vecIntB1(vecIntA.begin(), vecIntA.end());
	vector<int> vecIntB2(vecIntA.begin(), vecIntA.begin() + 3);
	vector<int> vecIntC(3, 9);//3个9
	vector<int> vecIntD(vecIntA);//vecIntD = vecIntA;

	//3 vector的遍历 通过数组的方式
	vector<int> v2(10);//提前把内存准备好
	for (int i = 0; i < v2.size(); i++)
	{
		v2[i] = i + 1;
		cout << v2[i] << " ";
	}
	cout << endl;
	printVec(v2);

	//4 vector的迭代器遍历和迭代器的种类
	//迭代器用于遍历,相当于一个指针
	//4.1 正向遍历
	for (vector<int>::iterator it = v2.begin(); it != v2.end(); it++)//v2.end()指向10的后一位置
	{
		cout << *it << " ";
	}
	cout << endl;
	//4.2 逆序遍历
	for (vector<int>::reverse_iterator rit = v2.rbegin(); rit != v2.rend(); rit++)
	{
		cout << *rit << " ";
	}
	cout << endl;

	//5 vector的删除
	//5.1 区间删除
	v2.erase(v2.begin(), v2.begin() + 3);
	printVec(v2);
	//5.2 根据元素的位置删除
	v2.erase(v2.begin() + 1);//参数必须是一个迭代器
	printVec(v2);
	//v2.erase(0);//错误
	//5.3 根据元素的值删除
	for (vector<int>::iterator it = v2.begin(); it != v2.end();)
	{
		if (*it == 9)
		{
			it = v2.erase(it);//返回一个迭代器,删除后会自动移到下一位置
			//it++;//不需要
		}
		else
		{
			it++;
		}
	}
	printVec(v2);

	//6 vector的插入
	//6.1 在pos位置插入一个elem
	v2.insert(v2.begin(), 1);
	printVec(v2);
	//6.2 在pos位置插入n个elem
	v2.insert(v2.begin() + 2, 4, 8);
	printVec(v2);
	//6.3 在pos位置插入[beg, end)区间的数据
	v2.insert(v2.end(), vecIntA.begin(), vecIntA.end());
	printVec(v2);

	return 0;
}
相关标签: C++