【温故而知新】C和C++6:STL中的vector容器

向量容器vector是STL中提供的最常用的容器之一,提供了随机访问数组的功能,可以实现对内部元素的随机访问以及方便地在末尾插入和删除数据。vector可以十分方便地实现数据结构中数组、堆栈功能,而且不需要手动编写管理数据结构的相关函数。其定义在头文件<vector>中。

对vector中的元素进行赋值:

向vector中存放数据主要有两种方法,其一是使用push_back函数逐个在vector末尾添加数据;采用这种方法不需要对容器进行初始内存分配,可以直接从一个空的容器开始操作,但是只能依次将元素加载容器的末尾,不是非常灵活。其二是先调用reserve函数预先设置容器大小,然后可以像普通的数组一样分别对其各个元素进行赋值。

获取容器的大小:

在vector中,“尺寸”和“容量”是两个不同的概念,分别用size()和capacity()函数获取。修改这两个值的方法分别为resize()和reverse()。无论如何修改容器,这两个值总是存在限制关系,即vector的size值始终不大于capacity值。可以这么认为,capacity所指的是容器的有效容量,而size所指的是容器的实际大小;并非所有的有效容积都被添加上了数据,而容器内所有数据所占据的空间必须属于有效容量中(汗!好拗口……)。当容器的size扩大并超过了capacity时,capacity的值同时也会扩大到至少同size相同的大小。

判断容器是否为空:

vector提供empty()方法,返回布尔值,为空返回true,非空返回false。

使用迭代器循环遍历成员:

定义一个迭代器需要指定容器名和其中的数据类型。定义和使用方法如:

vector<int>::iterator myIter;
vector<int> myVector;
......
for(myIter = myVector.begin();myIter!=myVector.end();myIter++)
{
......
}

在大多数时候,可以采用for_each循环,指定一个范围内的第一个和最后一个迭代器,以及函数的指针以方便地实现对容器对象的批量操作。具体可以参考http://msdn.microsoft.com/en-us/library/e5sk9w9k(v=vs.120).aspx。需要注意的是末尾iterator不包括在处理范围内。

使用STL的算法:
使用算法必须包含定义算法的头文件:#include <algorithm>
1、count和count_if函数可以统计容器中某个元素的个数并作为返回值。其中count_if的参数中有一个函数对象,可以使用更加灵活的方式判断待统计元素满足某个条件的判别准则。
2、find和find_if函数实现容器中某个元素的查找操作。同count一样,find也需要指定开始和结尾的迭代器,并指定查找的目标元素,返回值为一个指向该元素的迭代器。与count_if类似的,find_if也包含一个函数对象作为参数,可以更加细致、个性化地指定查找目标的特性。
3、增加和删除元素:我们知道在vector的末尾增加元素可以使用push_back()方便地完成,除此之外还可以使用insert()函数在任意位置插入元素,只是效率要远低于push_back()。类似的是,可以使用pop_back()和erase()函数实现删除最后一个和任意一个元素。需要注意的是,如果在一个迭代器的循环中erase迭代器指向的元素,这个迭代器将不可再使用。
4、交换对象:vector中实现了swap函数用于两个对象的交换。




				
时间: 2024-09-22 05:37:23

【温故而知新】C和C++6:STL中的vector容器的相关文章

深入解析C++ STL中的常用容器_C 语言

STL是C/C++开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用.下面,我们就浅谈某些常用的容器.这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点.STL中的常用容器包括:顺序性容器(vector.deque.list).关联容器(map.set).容器适配器(queue.stac). 1.顺序性容器 (1)vectorvector是一种动态数组,在内存中具有连续的存储空间,支持快速随机访问.由于具有连续的存储空间,所以在插入和删除操作方面,效率比较慢

STL中的set容器的一点总结

1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作.vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入.排序.删除.查找等.让用户在STL使用过程中,并不会感到陌生. 关于set,必须说明的是set关联式容器.set作为一个容器也是

【温故而知新】C和C++8:STL中的list容器

STL提供的list容器实现了双向链表的功能.因此,list容器中的各个元素都是双向链表中的节点,可以很方便地插入和删除元素,但是无法对容器中的元素进行随机存取,必须从容器的头部或尾部遍历.list容器在序列中的任何位置增删元素都是非常高效率的,并可以在需要的时候任意改变自身容量的大小. 1.list容器的定义: 关于如何构造一个list对象,STL提供了多种构造方法: list<type> name;//构建一个空对象 list<type> name(size);//构建一个初始

详解C++中的vector容器及用迭代器访问vector的方法_C 语言

vector vector是相同类型对象的集合.集合中的每个对象有个对应的索引.vector常被称为容器(container). 为了使用vector,需要: #include <vector> using std::vector; vector是一个类模版(class template).C++有函数模版和类模版.模版本身不是函数或类,必须通过指定 类型让编译器去实例化(instantiation)它.比如vector<int> ivec. vector是模版,不是类型.从vec

【温故而知新】C和C++9:STL中的set容器

1.Set/MultiSet容器的定义和创建 Set即集合类,可以在程序中按照次序来保存一组数值.在集合中,元素的关键字和数据二者相同,该集合本质上就是一个有序的排列.Multiset与set不同的是,前者其中的元素允许重复而后者不允许. Set对象采用二叉树结构储存,该结构的优点是查询效率高,并且有利于插入和删除操作. Set定义了多种实例化的方法,其中比较常用的有: set<int> s0;//定义一个空的set set<int, greater<int>> s1;

2015级C++第14周程序阅读 STL中的简单容器和迭代器

阅读并运行程序,解释程序执行得到的结果 (1) #include<iostream> #include<vector> #include<iterator> using namespace std; int main() { vector<int> ivec; int i; for(i = 0; i < 5; i++ ) ivec.push_back(i); for(i = 0; i < 5; i++) cout<<ivec[i]&l

C++中的vector容器对象学习笔记_C 语言

C++中数组很坑,有没有类似Python中list的数据类型呢?类似的就是vector! vector 是同一种类型的对象的集合 ,每个对象都有一个对应的整数索引值.和 string 对象一样,标准库将负责管理与存储元素相关的内存. 我们把 vector 称为容器,是因为它可以包含其他对象 . 一个容器中的所有对象都必须是同一种类型的 . vector对象的定义和初始化 同样的,使用前,导入头文件#include <vector> 可以使用using声明:using std::vector;

关于STL中set容器的一些总结_C 语言

1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作.vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入.排序.删除.查找等.让用户在STL使用过程中,并不会感到陌生. 关于set,必须说明的是set关联式容器.set作为一个容器也是

关于STL中vector容器的一些总结_C 语言

1.vector的简单介绍 vector作为STL提供的标准容器之一,是经常要使用的,有很重要的地位,并且使用起来也是灰常方便.vector又被称为向量,vector可以形象的描述为长度可以动态改变的数组,功能和数组较为相似.实际上更专业的描述为:vector是一个多功能的,能够操作多种数据结构和算法的模板类和函数库,vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据.(注:STL的容器从实现的