【问题标题】:STD library iterator that never ends?永无止境的 STD 库迭代器?
【发布时间】:2014-06-16 02:03:53
【问题描述】:

是否有一个字符串缓冲区类提供一个迭代器,该迭代器在必要时在递增时分配一个新缓冲区 (*++itr = 'x'),还是我首先坚持使用预分配缓冲区?

【问题讨论】:

    标签: c++ string iterator


    【解决方案1】:

    有一个叫做std::back_inserter()的东西,每次你分配给它时都会调用push_back()。一些示例代码:

    int main() {
        string s = "abc";
        auto it = std::back_inserter(s);
        it = 'd';
        cout << s << endl;
        return 0;
    }
    

    将打印出:abcd

    【讨论】:

    • 对于非 C++11,您需要使用而不是 auto 的类型是 std::back_insert_iterator&lt;std::string&gt;。此外,#include &lt;iterator&gt; 可能是必需的。
    • 使用*it++ = 'd'; 可以说与其他迭代器语义更一致,但无论哪种方式都可以......
    • 插入迭代器有点奇怪; *it 只是解析为 it;而++ 是无操作
    • @MattMcNabb:这可以说是一个实现细节,我倾向于在这种情况下保持一致性。
    • @awesomeyi 做到了!
    【解决方案2】:

    您可以将std::ostringstreamstd::ostream_inserter 一起使用,如下所示(未经测试):

    std:::ostringstream stream;
    auto itr = ostream_inserter<char>(stream);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多