STL之vector

STL之vector原理(个人简单理解)

新增元素:vector通过一个连续的数组存放元素,如果已有集合已满,在新增数据的时候,就要分配一块更大的内存,将原来的数据复制过来,释放之前的内存,在插入新增的元素。

插入新数据可以在最后插入(push_back或者其他的插入方式)也可以通过迭代器在任何位置插入。迭代器插入:通过迭代器与第一个元素的距离知道要插入的位置,int len=iter-begin();这个元素后面的所有元素都向后移动一个位置,在空出来的位置上存入新增的元素。

同理删除也是一样的分为删除最后一个元素pop_back和通过迭代器删除任意一个位置的元素erace(iter),通过迭代器还是要先找到要删除的元素的位置,int len=iter-begin();这个位置后面的每个元素都向前移动一个位置,同时erace不释放内存值初始化成默认值。还有一些其他的函数:比如删除所有元素,clear(只是循环调用了erace,所以删除的时候也是没有释放内存的),还有vector的大小函数size()等等

学习博客链接(我只是初步理解的更好了一点,感觉还没有理解透彻),下次继续~

引用代码(修改值的方法):

// vectorsample.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<vector>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	
	//int型vector,包含3个元素
	vector<int> vecIntA;

	//插入1 2 3
	vecIntA.push_back(1);
	vecIntA.push_back(2);
	vecIntA.push_back(3);
	
	int nSize = vecIntA.size();

	//通过引用修改vector
	cout<<"通过数组修改,第二个元素为8:"<<endl;
	vecIntA[1]=8;

	cout<<"vecIntA:"<<endl;
	//打印vectorA
	for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)
	{
		cout<<*it<<"     ";
	}
	cout<<endl;
	
	//通过引用修改vector
	cout<<"通过引用修改,第二个元素为18:"<<endl;
	int &m = vecIntA.at(1);
	m=18;

	cout<<"vecIntA:"<<endl;
	//打印vectorA
	for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)
	{
		cout<<*it<<"     ";
	}
	cout<<endl;

	//通过迭代器修改vector
	cout<<"通过迭代器修改,第二个元素为28"<<endl;
	vector<int>::iterator itr = vecIntA.begin()+1;
	*itr = 28;

	cout<<"vecIntA:"<<endl;
	//打印vectorA
	for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)
	{
		cout<<*it<<"     ";
	}
	cout<<endl;

	return 0;
}

引用博客链接

posted @ 2017-11-13 23:02  heihuifei  阅读(136)  评论(0编辑  收藏  举报