C++ vector容器

vector基本概念

功能

  • vector数据结构和数组非常类似

与普通数组区别

  • 数组的空间是静态的,vector的空间可以动态扩展

动态扩展

  • 当发现原来空间不够时,则申请一个更大的内存空间,并将原空间的数据拷贝到新空间,同时释放原空间。

vector构造函数

函数原型:

vector();  						//默认构造函数,使用vector<T> vec;
vector(v.begin(), v.end());  	//创建vector对象,并使用v[being,end)(前开后闭)的元素进行初始化
vector(n, elem),				//创建vector对象,并使用n个elem元素进行初始化
vector(const vector &vec);  	//拷贝构造函数

vector赋值操作

函数原型:

//重载操作符=
vector& operator=(const vector &vec);
//assign赋值
void assign(begin, end); 	//将[being,end)区间的值赋给vector
void assign(n, elem)		//将n个elem赋值给vector

vector容量和大小

函数原型:

bool empty();		// 判断容器是否为空
capacity();			// 容器的容量
size();				// 容器中元素的个数
resize(int num);	// 重新制定容器中元素个数,若容器变长,则以默认值填充
					// 如果容器变短,则超出容器长的元素被删除
resize(int num, elem); 	// 重新制定容器中元素个数,若容器变长,则以elem值填充
						// 如果容器变短,则超出容器长的元素被删除

vector插入和删除

函数原型:

void push_back(elem);		//尾部插入元素elem
void pop_back();		//删除尾部元素
//insert
insert(const_iterator pos, elem);		//迭代器pos指向位置插入元素elem (pos位置开始元素后移)
insert(const_iterator pos, int count, elem);	//迭代器pos指向位置pos插入count个元素elem
insert(const_iterator pos, beg, end); //迭代器pos指向位置pos插入区间[beg,end)的元素
//erase
erase(const_iterator pos);		//删除迭代器pos指向元素
erase(const_iterator start, cosnt_iterator end);	//删除迭代器[start,end)之间的元素
//claer
clear();		//清空容器

vector数据存取

函数原型:

T& operator[](int id);		//重载[],存取索引id指向的数据
T& at(int id);	//存取索引id指向的数据
T& front();		//存取容器第一元素
T& back();			//存取容器中最后一个元素

//迭代器
vector<T>::iterator;			//随机存取迭代器
vector<T>::const_iterator;		//只读的随机迭代器

vector互换容器

功能:

  • 实现两个容器内元素互换
    函数原型:
swap(vec);	//将vec与本身的元素互换

用途:

  • 收缩vector内存空间
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;

void main()
{
	vector<int> vec;
	for (int i = 0; i < 100000; i++)
	{
		vec.push_back(i);
	}
	cout << vec.capacity() << endl;	// 容量138255
	cout << vec.size() << endl;		// 大小100000

	//resize之后实际只占用3个元素内存空间,但容量却有138255个
	vec.resize(3);	
	cout << vec.capacity() << endl;	// 容量138255
	cout << vec.size() << endl;		

	// 利用C++匿名对象使用完内存立即回收的机制结合swap实现内存收缩
	// vector<int>(vec) 创建一个匿名对象,再swap(vec)
	vector<int>(vec).swap(vec);		
	cout << vec.capacity() << endl;
	cout << vec.size() << endl;
}

vector预留空间

功能描述:

  • 减少在不断插入数据时,vector动态扩容的次数,避免过多次数的数据拷贝复制
    函数原型:
reserve(int len);	//容器空间扩容至len长度,扩充的空间不进行初始化,元素不可访问
					//若容器的容量已大于len,则容量不改变

实例

#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;

void main()
{
	vector<int> vec;
	int *p = NULL, num = 0;
	for (int i = 0; i < 100000; i++)
	{
		vec.push_back(i);
		if (p != &vec[0])
		{
			p = &vec[0];
			num++;
		}
	}
	cout << num << endl;   // 进行了30次内存申请和元素内容拷贝操作

	num = 0;
	vector<int> vec1;
	vec1.reserve(100000);  //扩充容量,提前申请足够的内存,进行1次内存申请
	for (int i = 0; i < 100000; i++)
	{
		vec1.push_back(i);
		if (p != &vec1[0])
		{
			p = &vec1[0];
			num++;
		}
	}
	cout << num << endl;	// 只进行1次内存申请
	system("pause");
}

STL常用容器

常用容器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值