一,string
1,与vector类似,string也面临重新分配空间的问题, 也有reserve(), capacity(),等一系列函数, 不过一个差别是string的reserve可以缩小容量,而vector不行
2,string 也支持iterator,但string中的find等函数并不返回iterator,而是size_t (string::size_type)
3,string的一大不方便之处在于没有split函数, 现实现一个版本如下:
void split(string str, vector<string>& vec,string sep="#") { size_t beg,end; beg=0; end=str.find(sep,beg); size_t len=sep.size(); while(beg!=string::npos) { vec.push_back(str.substr(beg,end-beg)); beg= end!=string::npos ? end+len :end; end=str.find(sep,beg); } }
4,string的replace方法不支持"将某一旧串替换成新串",可以用STL算法replace
replace(str.begin(),str.end(),"old_str","new_str");
二, 迭代器 iterator
1,STL把迭代器分的比较细, 但一般来说我们需要关注的只有两类: 随机读写迭代器和非随机的, 前一种的应用有vector, deque, string和数组, 后一种是指各种关联容器和list如set,map等
2,如果使用iter和algorithm 进行编程,需要注意一些可能使迭代器失效的操作, 通常的解决办法是reserve一个足够大的空间
3,一些STL算法使用的迭代器需要迭代器配接器, STL提供以下三种配接器:
a) back_inserter : 执行push_back操作
b)front_inserter: 执行push_front操作
c)insert 执行erase操作