C++中vector容器的相关操作

vector基本概念
普通数组时静态空间,而vector可以动态扩展,但是vector的动态扩展并不是在存储空间后面添加存储位置,而是寻找新的更大的存储位置,然后将原空间中的所有的数据复制到新的存储位置里。
vector中常用的迭代器:begin指向第一个,end指向最后一个的下一个
,rbegin指向最后一个,rend指向第一个的前一个,vecotr迭代器比较强悍,不需要连续的访问方式,支持随机访问
//vector的构造方式
/*
vector v;//采用默认构造函数
vector(v.begin(),v.end());//将v.begin()到v.end()中的元素拷贝给本身,前闭后开
vector(n,elem);//构造函数将n个elem拷贝给本身
vector(const vector&vec);//采用拷贝构造函数
*/

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

/*
void print(vector<int> V)
{
	for (vector<int>::iterator it = V.begin();it != V.end();it++)
		cout << *it << "  ";
	cout << endl;
}

int main()
{
	vector<int> V;
	for (int i = 0;i < 10;i++)
		V.push_back(i);
	print(V);
	vector<int> v(V.begin(), V.end());
	print(v);
	vector<int> v1(10, 10);
	print(v1);
	vector<int> v2(v1);
	print(v2);
	system("pause");
}
*/

/*
vector容器的赋值
vector operator=(const vector&v)//将v中的值赋值给目标
assign(v.begin,v.end)//将[v.begin,v.end)中的数据传递给对象
assign(n,elem)//将n个elem传递给对象
*/

/*
void print(vector<int>&v)
{
	for (vector<int>::iterator it=v.begin();it != v.end();it++)
		cout << *it << " ";
	cout << endl;
}

int main()
{
	vector<int> v;
	for (int i = 0;i < 10;i++)
		v.push_back(i);
	vector<int> v1 = v;
	vector<int> v2;
	v2.assign(v1.begin(), v1.end());
	//print(v2);
	vector<int> v3;
	v3.assign(10, 1);
	print(v3);
	system("pause");

}
*/

//vector容器的的容量和大小操作
//empty用来检测容器是否为空
//capacity用来检测容器的容量
//size用来检测容器中数据数量
//resize用来重新指定容器长度,如果长度大于原来的长度那么使用0来填充,如果比原来短了那么会删除超出部分
//注意resize指定的是size而不是capacity


/*
void print(vector<int>&v)
{
	for (vector<int>::iterator it = v.begin();it != v.end();it++)
		cout << *it << "  ";
	cout << endl;
}

int main()
{
	vector<int> v;
	for (int i = 0;i < 10;i++)
		v.push_back(i);
	print(v);
	cout << v.empty() << endl;
	cout << v.capacity() << endl;
	cout << v.size() << endl;
	v.resize(15);
	cout << v.capacity() << endl;
	cout << v.size() << endl;
	print(v);
	system("pause");
}

*/


//vector的插入和删除
/*
push_back(ele)在尾部插入数据
pop_back()删除最后一个元素
insert(const_iterator pos,int ele)迭代器指向位置插入ele
insert(const_iterator pos,int cout,ele)迭代器指向位置pos插入cout个元素ele
erase(const_iterator pos)删除pos指向位置元素
erase(const_iterator start,const_iterator end);删除迭代器start到end之间的元素,注意是[start,end);
*/

/*
void print(vector<int>&v)
{
	for (vector<int>::iterator it = v.begin();it != v.end();it++)
		cout << *it << " ";
	cout << endl;
}

int main()
{
	vector<int> v;
	for (int i = 0;i < 10;i++)
		v.push_back(i);
	print(v);
	v.pop_back();
	print(v);
	v.insert(v.begin(), 100);
	print(v);
	v.insert(v.begin(), 2, 100);
	print(v);
	v.erase(v.begin());
	print(v);
	v.erase(v.begin(), v.begin() + 2);
	print(v);
	system("pause");
}

*/

//vector容器的存取
/*
[idx]返回idx所指向的数据
at(int idx)返回idx所指的数据
front返回容器中的第一个数据,这里返回的是数据begin返回的是迭代器
back返回容器中的最后一个数据,这里返回的数据,end()返回的是迭代器
*/



/*
void print(vector<int>&v)
{
	for (vector<int>::iterator it = v.begin();it != v.end();it++)
		cout << *it << " ";
	cout << endl;
}

int main()
{
	vector<int> v;
	for (int i = 0;i < 10;i++)
		v.push_back(i);
	for (int i = 0;i < 10;i++)
		cout << v[i] << " ";
	cout << endl;
	for (int i = 0;i < 10;i++)
		cout << v.at(i) << " ";
	cout << endl;
	cout << v.front() << endl;
	cout << v.back() << endl;
	getchar();
}
*/


//vector互换容器
/*
swap(vectorv)将自身内容与v中内容进行互换,可以借助swap实现内存的合理化
当v容器扩大以后,如果使用resize来减少其尺寸,那么v的capacity是不会改变的,
但是可以通过vector(v).swap(v)的方式来使得capacity减小到和size一样大小
*/



/*
void print(vector<int>&v)
{
	for (vector<int>::iterator it = v.begin();it != v.end();it++)
		cout << *it << " ";
	cout << endl;
}

int main()
{
	vector<int> v1;
	vector<int> v2;
	for (int i = 0;i < 10;i++)
	{
		v1.push_back(i);
		v2.push_back(i + 10);
	}
	print(v1);
	print(v2);
	v1.swap(v2);
	print(v1);
	print(v2);
	for (int i = 0;i < 10000;i++)
		v1.push_back(i);
	cout << v1.capacity() << endl;
	cout << v1.size() << endl;
	v1.resize(3);
	cout << v1.capacity() << endl;
	cout << v1.size() << endl;
	vector<int>(v1).swap(v1);
	cout << v1.capacity();
	getchar();
}
*/

//vector预留空间
//reserve(int len)预留len个空间,但是该空间均未初始化,不可以访问,下面程序中的n统计了在v的扩充过程中一共扩展了多少次内存
//可以发现不使用reserve的话,需要扩展很多次,很浪费时间



int main()
{
	vector<int> v;
	int*p = NULL;
	int n = 0;
	for (int i = 0;i < 10000;i++)
	{
		v.push_back(i);
		if (p != &v[0])
		{
			p = &v[0];
			n++;
		}
	}
	cout << n << endl;
	getchar();
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值