【问题标题】:Iterator to a specific character in a std::string指向 std::string 中特定字符的迭代器
【发布时间】:2011-12-16 10:15:31
【问题描述】:

我需要一个指向 std::string 中特定字符的迭代器,而不是从头开始循环。

这是最好的方法吗?

std::string s("abcdefg...");
size_t id = 5;
std::string::const_iterator it = s.begin();
std::advance(it, id - 1);

【问题讨论】:

    标签: c++ string iterator


    【解决方案1】:

    你也可以这样做:

    std::string::const_iterator it = s.begin() + (id-1);
    

    虽然它应该具有或多或少与std::advance 相同的性能,因为如果it 是一个随机访问迭代器,advance 使用operator+(否则它会诉诸循环;这会发生例如@987654326 @迭代器)。

    【讨论】:

    • 我忘记了 std::string 分配是连续的... Grazie!
    • @PietroM:与string分配是否连续无关,与迭代器类型有关。 deque 没有连续分配,但它确实有随机访问迭代器,因此它的迭代器有 operator+
    • @PietroM: prego,ma effettivamente è come dice Steve Jessop。 :) 事实上,字符串保证连续的内存分配,相反,允许您使用指针在字符串内部移动(例如通过&(s[0]) 获得)。
    【解决方案2】:

    由于std::string的迭代器是随机访问的,所以可以直接这样做:

    std::string::const_iterator it = s.begin() + (id-1);
    

    (这是 std::advance 最终扩展为随机访问迭代器的内容。)

    【讨论】:

      猜你喜欢
      • 2017-01-07
      • 1970-01-01
      • 2015-04-29
      • 2020-01-16
      • 2014-11-08
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 2021-09-25
      相关资源
      最近更新 更多