【温故而知新】C和C++6:STL中的vector容器
来源:互联网 发布:淘宝手柄 编辑:程序博客网 时间:2024/04/19 11:38
向量容器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函数用于两个对象的交换。
0 0
- 【温故而知新】C和C++6:STL中的vector容器
- 【温故而知新】C和C++7:STL中的deque容器
- 【温故而知新】C和C++8:STL中的list容器
- 【温故而知新】C和C++9:STL中的set容器
- 【温故而知新】C和C++5:STL容器技术综述
- C模板实现STL容器中的vector
- 【C++ STL 温故而知新 001】vector容器和iterator迭代器
- C++STL之vector容器
- 【温故而知新】C和C++4:STL概览
- C++STL中的容器
- C++STL容器技术之Vector
- 初学者学习C++STL之vector容器
- C++STL中vector容器的用法
- C++STL中vector容器的用法
- C++STL中vector容器的用法
- C++STL中vector容器的用法
- C++STL学习(1)容器vector
- c++STL容器vector的复制
- 为android封装的百度定位组件
- AVX是什么?AVX指令集技术与应用解析
- 多线程的那点儿事(基础篇)
- C#通用类库--DOS常用命令
- C#中DataGridView控件使用大全
- 【温故而知新】C和C++6:STL中的vector容器
- 【SQL Server数据迁移】32位的机器:SQL Server中查询ORACLE的数据
- SVM(四) 支撑向量机,二次规划问题
- JS执行顺序-(deferred 延迟队列)
- 网站检测该注意的点
- Java生成UUID
- 《windows核心编程系列》谈谈内存映射文件
- Ubuntu 12.10 软件更新源列表
- 归并排序