进一步拆分向量中的一些元素的最佳方法

时间:2014-07-21 08:01:22

标签: c++ vector

这是一个样本载体

vector<string> v;
v.push_back("one");
v.push_back("two");
v.push_back("three four");
v.push_back("five");

// print

one
two
three four
five

我需要拆分3号元素,所以现在是矢量外观(不创建另一个矢量)

// print

one
two
three
four
five

我应该使用迭代器还是简单的循环?它也应该有很好的表现。

1 个答案:

答案 0 :(得分:0)

正如评论中指出的那样,如果您正在插入 元素进入向量(你将成为),你必须避免 使用无效的迭代器。仍然是一些事情 以下内容应该有效:

std::vector<std::string> iter = v.begin();
while ( iter != v.end() ) {
    std::string::iterator breakpoint = std::find( iter->begin(), iter->end(), ' ' );
    if ( breakpoint == iter->end() ) {
        ++ iter;
    } else {
        std::string next( breakpoint + 1, iter->end() );
        iter->erase( breakpoint, iter->end() );
        iter = v.insert( iter + 1, next );
    }
}

在这种情况下,我通常更喜欢生成副本, 但是。