容器 vector指针的学习
在c++语言中,模板容器是一个十分重要的知识点。今天主要学习了vector这个容器,这个容器内是数组,存储的数据是连续的。vector声明定义完成后,可以向该vector压入数据,具体用到的是push_back()这个vector自带的成员函数。但是如何使用指针取出其中的数据呢?在之前我们提到了vector的[]操纵,这里我们就来学习一下vector类的指针,这里成为迭代器。其类型为vector&
在c++语言中,模板容器是一个十分重要的知识点。今天主要学习了vector这个容器,这个容器内是数组,存储的数据是连续的。vector声明定义完成后,可以向该vector压入数据,具体用到的是push_back()这个vector自带的成员函数。但是如何使用指针取出其中的数据呢?
在之前我们提到了vector的[]操纵,这里我们就来学习一下vector类的指针,这里成为迭代器。其类型为vector<int>::iterator,其中的int是vector元素的类型,这个可以定位模板来适应不同的元素。当数组为二维时,可以将定义为vector<vector<int>>::iterator,其他多维都可以此类推。声明后,指针的首地址可以根据对象的成员函数begin()来获得,一直到end()结束。步长是跟元素类型有关,指针加一来指向下一个元素。具体可参考如下代码
vector<vector<int>> arr;//声明定义二维vector对象arr;
vector<int> col[10];//定义1维对象col数组。
for(int i=0;i<10;i++)//给vector对象赋值
{
for(int j=0;j<15;j++)
{
col[i].push_back(j+i*10);
}
arr.push_back(col[i]);
}
for(vector<vector<int>>::iterator it = arr.begin();it != arr.end();it++)//通过定义指针(迭代器)来获取二维对象arr的内容。
{
for(vector<int>::iterator iit = (*it).begin();iit != (*it).end();iit++)//获得一维vetor对象的col元素。
{
printf("%d\r\n",*iit);//逐个打印arr的元素,这里一共有150个元素。
}
}
注意这里要包含vector头文件。
vector组如果压入的变量过多,超过了分配的最大内存(MAX_SIZE = 256),vector将分配申请更大的内存,同时将之前的数据拷贝到新内存中去。
在几个STL容器里,vector是个随机访问,并且是连续的。list适合频繁插入数据的,但是内存不连续。Set容器中的元素不能重复。map容器是一一对应。set,map采用了高效的平衡二叉树检索算法,红黑树,拥有更高的插入删除效率。不需要内存移动和内存拷贝,直接替换指向节点的指针即可。Map和HASH_MAP 的区别是HASH_MAP利用了hashmap利用hash算法加速了对元素的查找,但是需要更多的空间来存储这些元素。vector的实质是数组,list实质是链表,Map和Set实质是二叉树。
学习完感觉和数组真的好像,但是vector的功能十分强大,在之后的章节中我们还将继续碰到。
更多推荐
所有评论(0)