9.3.2 访问元素
顺序容器提供了4种访问元素的方式:c.front()、c.back()、c[n]、c.at(n)。对于存储空间连续的容器(vector、string、deque和array)来说,这4中方式都可以用,可以通过front和back获得首、尾元素,也可以通过下标运算符和at成员函数访问任意位置的元素。而存储空间不连续的list只能用begin和end成员函数获得首、尾元素的引用,只能通过迭代器递增递减访问中间的元素!forward_list更可怜,只能用begin获得首元素,不能用end获得尾元素,而且forward_list的迭代器不支持递减运算,因此也不能通过尾后迭代器递减来访问尾元素。总之, forward_list是不支持除首元素外的元素的直接访问的!
注意访问成员函数返回的是引用,因此可以通过它们改变容器内元素的值!
顺序容器的front和back成员函数是通过return *c.begin()和return *--c.end()实现的,因此对空容器使用front和back,会报错“...iterator not dereferencable”!
对空容器使用front和back,以及下标运算符的下标越界,会产生未定义的行为。而使用at函数时下标越界,会抛出out_of_range的异常。
发现一个问题:就是容器的元素类型不能是const的,而容器本身可以定义成const的,就是说“vector<const int> v”是非法的,而“const vector<int>”是合法的!此时容器的大小和元素的值都不能改变。