Используя станд.:: строковый итератор для нахождения запуска и конца он - строка

Учитывая просто станд.:: строковый итератор, действительно ли возможно определить запуск и конечные точки строки? Если я не имею доступа к строковому объекту и так не могу назвать string.begin () и string.end (), и все, что я могу сделать, увеличить или постепенно уменьшить итератор и протестировать значение.

Спасибо, Phil

10
задан Phil Boltt 3 March 2010 в 04:08
поделиться

2 ответа

Короткий ответ - нет. Длинный ответ таков: поскольку итераторы не должны знать о контейнерах или диапазонах, которые проходят итерацию, ожидается, что они только

  • смогут перейти к следующему элементу (inc или dec к следующему или предыдущему)
  • Разыменовать самих себя, чтобы выявить ссылку на значение, на которое они указывают
  • И, конечно же, сравнить себя с другими итераторами, что наиболее важно, с каким-то «конечным» итератором.

Кроме того, итераторы некоторых типов могут делать больше, чем просто перечисленное выше, но в основном все они должны иметь / выполнять указанное выше в той или иной форме.

6
ответ дан 4 December 2019 в 02:50
поделиться
  • Для конечной точки строки: Предположим, что внутренняя символьная строка оканчивается нулем. Затем путем разыменования итератора, чтобы увидеть, являются ли они '\ 0', чтобы определить, что следующая позиция является конечной точкой. Но для другой строки, не оканчивающейся нулем, узнать такую ​​информацию невозможно.
  • Для начальной точки строки: Невозможно сделать такое.

По умолчанию std :: string :: iterator - это просто случайный двунаправленный итератор, ничего не знающий о контейнере.

Но если вы работаете на платформе Visual C ++, возможно, вы можете использовать какой-нибудь способ взлома, например, следующий, чтобы передать управление его контейнеру, но это очень опасно:

  // it is the passed in string::iterator parameter.
  if (it._Has_container()) {
      string* strRef = (string*)it._Mycont;
  }
1
ответ дан 4 December 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: