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