c++ vector容器和iterator迭代器
来源:互联网 发布:萨拉戈萨大学 知乎 编辑:程序博客网 时间:2024/05/29 07:11
vector——容器,是具有相同类型的对象的集合。从C语言的数组的概念衍生而来,理解上可以结合C数组。但是从作用上,又比C语言数组强大很多。
我们在使用C语言数组的时候,常常保存的是int、float、char类型的数值,vector除此之外,还可以保存自定义的类对象等。
例如:
vector<int> ivec; // ivec holds objects of type int
vector<Sales_item> Sales_vec; // holds Sales_items
vector的操作
vector标准库提供许多类似于string对象的操作,下表列出了几种最重要的vector操作。
v.empty()
如果v为空,则返回true,否则返回false。
v.size()
返回v中元素的个数。
v.push_back(t)
在v的末尾增加一个值为t的元素。
v[n]
返回v中位置为n的元素。
v1 = v2
把v1的元素替换为v2中元素的副本。
v1 == v2
如果v1与v2相等,则返回true。
!=, <, <=, >, >=
保持这些操作符惯有的含义。
向vector添加元素
push_back()操作接受一个元素值,并将它作为一个新的元素添加到vector对象的后面,也就是“插入(push)”到vector对象的“后面(back)”:
// read words from the standard input and store them as elements in a vector
string word;
vector<string> text; // empty vector
while (cin >> word) {
text.push_back(word); // append word to text
}
vector对象的size
empty和size操作类似于string类型的相关操作。成员函数size返回相应vector类定义的size_type的值。
使用size_type类型时,必须指出该类型是在哪里定义的。vector类型总是包括vector的元素类型:
vector<int>::size_type // ok
vector::size_type // error
容器的iterator类型
每种容器类型都定义了自己的迭代器类型,如vector:
vector<int>::iterator iter;
这条语句定义了一个名为iter的变量,它的数据类型是由vector<int>定义的iterator类型。每个标准库容器类型都定义了一个名为iterator的成员,这里的iterator与迭代器实际类型的含义相同。
不同的容器类定义了自己的iterator类型,用于访问容器内的元素。换句话说,每个容器定义了一种名为iterator的类型,而这种类型支持(概念上的)迭代器的各种行为。
begin和end操作
每种容器都定义了一对命名为begin和end的函数,用于返回迭代器。如果容器中有元素的话,由begin返回的迭代器指向第一个元素:
vector<int>::iterator iter = ivec.begin();
上述语句把iter初始化为由名为begin的vector操作返回的值。假设vector不空,初始化后,iter即指该元素为ivec[0]。
由end操作返回的迭代器指向vector的“末端元素的下一个”。通常称为超出末端迭代器(off-the-end iterator),表明它指向了一个不存在的元素。如果vector为空,begin返回的迭代器与end返回的迭代器相同。
由end操作返回的迭代器并不指向vector中任何实际的元素,相反,它只是起一个哨兵(sentinel)的作用,表示我们已处理完vector中所有元素。
vector迭代器的自增和解引用运算
迭代器类型定义了一些操作来获取迭代器所指向的元素,并允许程序员将迭代器从一个元素移动到另一个元素。
迭代器类型可使用解引用操作符(*操作符)来访问迭代器所指向r 元素:
*iter = 0;
解引用操作符返回迭代器当前所指向的元素。假设iter指向vector对象ivec的第一个元素,那么*iter和ivec[0]就是指向同一个元素。上面这个语句的效果就是把这个元素的值赋为0。
迭代器使用自增操作符向前移动迭代器指向容器中下一个元素。从逻辑上说,迭代器的自增操作和int型对象的自增操作类似。对int对象来说,操作结果就是把int型值“加1”,而对迭代器对象则是把容器中的迭代器“向前移动一个位置”。因此,如果iter指向第一个元素,则++iter指向第二个元素。
- vector容器和iterator迭代器
- 容器vector和迭代器iterator+使用
- c++ vector容器和iterator迭代器
- 容器vector和迭代器iterator const_iterator
- c++中iterator迭代器和vector容器
- vector 容器与iterator迭代器
- vector容器与iterator迭代器
- vector容器与iterator迭代器
- vector容器与iterator迭代器
- vector容器与iterator迭代器
- vector容器与iterator迭代器
- vector容器与iterator迭代器
- vector容器与iterator迭代器
- vector容器与iterator迭代器
- Vector容器与iterator迭代器
- vector容器与iterator迭代器
- vector容器与iterator迭代器
- C++vector 迭代器iterator
- MySQL创建用户带SSL认证,并且有SUBJECT和ISSUER的时候,报错[Note] X509 subject mismatch:
- 嵌入式系统用户接口设计之裸机界面开发(二)
- 库函数和系统调用的区别
- c++中什么类型的成员变量只能在构造函数的初始化列表中进行
- 高性能前端开发-Web性能测试工具推荐
- c++ vector容器和iterator迭代器
- 导入excel错误:外部表不是预期的格式 解决方案
- Android延时执行的几种方法
- 自动化测试框架比较
- centos 解压 tar命令
- Android 多Activity之间跳转传值
- 1023——坑爹的黑店
- MVC性能测试
- Http协议详解