Используя итератор std::string, чтобы найти начало и конец строки

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

Спасибо, Фил

Ответ 1

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

  • Уметь переходить к следующему элементу (inc или dec to next или prev)
  • Выделите себя так, чтобы показать ссылку на значение, которое они указывают на
  • И с течением времени сравните себя с другими итераторами, что наиболее важно, итератором "end".

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

Ответ 2

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

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

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

  // it is the passed in string::iterator parameter.
  if (it._Has_container()) {
      string* strRef = (string*)it._Mycont;
  }