对C++容器类vector的一点理解

今天都在看vector,对于STL容器我接触的比较晚,主要是以前用QT写进程,用的都是QT库里边自带的更为完善的容器,直接就开始用了,有些概念根本没有搞清楚,所以说有的时候用的东西更智能了,人就变笨了。
之前我自己习惯访问容器的方式大多数是采用下标的方式,比如byteArray[n],或byteArray.at[n],很少运用迭代器。
迭代器的利用举下面这个栗子:

1
2
3
4
5
6
7
const 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是一个类型安全的输出机制,它只输出int类型或者相容类型的值。他的构造函数的第一个参数指定了输出流;第二个参数是一个字符串,指定了输出值之间的分隔符(写到这里我都怒了,搜狗linux版本,你来给我解释一下“指奸”是个什么意思,感觉好难用,心好累T T)。ostream_iterator定义在中。

通过下面这个小栗子,体验一下vector与类C数组的区别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cout << "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
4
out_of_range 表示下标超出范围。例如,给vector成员函数at指定一个无效下标
invalid_argument 表示传递给函数的参数无效
length_error 表示创建过长的容器,字符串等
bad_alloc 表示试图使用new分配内存时,因可用的内存不够而导致操作失败

原文:大专栏  对C++容器类vector的一点理解


上一篇:java类反射越过泛型检查


下一篇:C++整数