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

如果v1v2相等,则返回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

emptysize操作类似于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操作

每种容器都定义了一对命名为beginend的函数,用于返回迭代器。如果容器中有元素的话,由begin返回的迭代器指向第一个元素:

vector<int>::iterator iter = ivec.begin();

上述语句把iter初始化为由名为beginvector操作返回的值。假设vector不空,初始化后,iter指该元素为ivec[0]

end操作返回的迭代器指向vector的“末端元素的下一个”。通常称为超出末端迭代器(off-the-end iterator),表明它指向了一个不存在的元素。如果vector为空,begin返回的迭代器与end返回的迭代器相同。

end操作返回的迭代器并不指向vector中任何实际的元素相反它只是起一个哨兵sentinel的作用表示我们已处理完vector中所有元素。

vector迭代器的自增和解引用运算

迭代器类型定义了一些操作来获取迭代器所指向的元素,并允许程序员将迭代器从一个元素移动到另一个元素。

迭代器类型可使用解引用操作符*操作符)来访问迭代器所指向元素:

*iter = 0;

解引用操作符返回迭代器当前所指向的元素。假设iter指向vector对象ivec的第一个元素,那么*iterivec[0]就是指向同一个元素。上面这个语句的效果就是把这个元素的值赋为0

迭代器使用自增操作符向前移动迭代器指向容器中下一个元素。从逻辑上说,迭代器的自增操作和int型对象的自增操作类似。对int对象来说,操作结果就是把int型值“加1”,而对迭代器对象则是把容器中的迭代器“向前移动一个位置”。因此,如果iter指向第一个元素,则++iter指向第二个元素。






原创粉丝点击