2010-03-03 2 views
10

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

Спасибо, Фил

ответ

6

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

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

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

+0

Да вы определенно нужны итераторы, указывая на конец или начало сравнения текущего итератора, что можно определить при определении строки? – DogDog

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^