C++学习_杂项

一,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操作

你可能感兴趣的:(C++,String,iterator)