下标只能用于获取已存在的元素
必须是已存在的元素才能用下标操作符进行索引,通过下标操作进行赋值时,不会添加任何元素,会改变已有元素。
仅能对确知已存在的元素进行下标操作,试图获取不存在的元素必然产生运行时错误,和大多数同类错误一样,不能确保执行过程可以捕捉到这类错误,运行程序的结果是不确定的。任何使用下标操作的的时候,都应注意此问题。
试图对不存在的元素进行下标操作时程序设计中经常会犯的严重错误。所谓的“缓冲区溢出”错误就是对不存在的元素进行下标操作的结果。这样的缺陷往往导致pc机和其他应用中最常见的安全问题。
除了下标访问vector对象的元素外,标准库还提供了另一种访问元素的方法--迭代器。
迭代器是一种检查容器内元素并遍历元素的数据类型。
标准库为每一种标准容器(包括vector)定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。迭代器对所有的容器都适用。适用迭代器并不需要完全了解它复杂的实现细节。
1.容器的iterator类型
每个容器类型都定义了自己的迭代器类型,如vector
vector<int>::iiterator iter;
一个名为iter的变量,它的数据类型是由vector<int>定义的iterator类型,这里的iterator与迭代器实际类型的含义相同。每个标准库容器类型都定义了一个名为iterator的成员。