今天都在看vector,对于STL容器我接触的比较晚,主要是以前用QT写进程,用的都是QT库里边自带的更为完善的容器,直接就开始用了,有些概念根本没有搞清楚,所以说有的时候用的东西更智能了,人就变笨了。
之前我自己习惯访问容器的方式大多数是采用下标的方式,比如byteArray[n],或byteArray.at[n],很少运用迭代器。
迭代器的利用举下面这个栗子:
1
2
3
4
5
6
7const int SIZE = 6;
int array[ SIZE ] = {1, 2, 3, 4, 5, 6};
ostream_iterator<int> output( cout, " ");
vector< int > integers( array, array + SIZE);
cout << "vector integers contains: ";
copy ( integers.begin(), integers.end(), output);
上面这个栗子中,我使用了ostream_iterator,用于以空格为间隔输出一些整数,ostream_iterator
通过下面这个小栗子,体验一下vector与类C数组的区别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16cout << "nFirst element of integers: " << integers.front()
<< "nLast element of integers: " << integers.back();
integers[0] = 7;
integers.at(2) = 10;
integers.insert( integers.begin() +1 , 22);
try
{
integers.at(100) = 777;
}
catch ( out_of_range &outOfRange)
{
cout << "nnException: " <<outOfRange.what();
}
这个小栗子演示了通过下标访问vector的两种方法。其中at函数较为安全,at函数首先会检查参数提供的值是否在vector的范围内,若不在,at会抛出out_of_range异常,定义在头文档
1
2
3
4out_of_range 表示下标超出范围。例如,给vector成员函数at指定一个无效下标
invalid_argument 表示传递给函数的参数无效
length_error 表示创建过长的容器,字符串等
bad_alloc 表示试图使用new分配内存时,因可用的内存不够而导致操作失败