vector的迭代器容易失效:
vector<char> chars;
constexpr int max = 20000;
chars.reserve(max);
vector<char*> words; //指向单词开始位置的指针
因为vector声明的时候不需要声明大小,随着push_back(),元素数目增多,达到容量时,(一般容量会自动增加一半)。此时容量发生重新分配,原来的迭代器会失效。即“words”里面储存的指针会失效。 所以需要提前reserve。
这里的失效的含义是指如果继续使用这些指针的话会产生未定义的行为。
vector的优点:
1.vector的元素是紧凑储存的。即用多少就给多少,不会像数组一样必须要开多大,vector是即用即增。
2.vector的遍历非常快。
3.vector支持随机访问,使得很多算法(sort,binary_search ) 非常高效。
vector<char> 与 string
vector是一种保存值得通用机制,并不对保存的值之间的关系做任何假设,比如对于vector<char> “hello world!”就是一个13个char类型的元素的序列而已。与之相反,string的设计目的就是保存字符序列,它认为字符间的关系非常重要。