처음부터 반복하지 않고 std::string
의 특정 문자에 대한 반복자가 필요합니다.std :: string의 특정 문자에 대한 반복자
이렇게하는 것이 가장 좋은 방법입니까?
std::string s("abcdefg...");
size_t id = 5;
std::string::const_iterator it = s.begin();
std::advance(it, id - 1);
처음부터 반복하지 않고 std::string
의 특정 문자에 대한 반복자가 필요합니다.std :: string의 특정 문자에 대한 반복자
이렇게하는 것이 가장 좋은 방법입니까?
std::string s("abcdefg...");
size_t id = 5;
std::string::const_iterator it = s.begin();
std::advance(it, id - 1);
또한 간단하게 수행 할 수 있습니다
std::string::const_iterator it = s.begin() + (id-1);
it
는 랜덤 액세스 반복자 인 경우, advance
그렇지 않으면 (operator+
를 사용하기 때문에이 더 많거나 std::advance
의 동일한 성능 적게해야하지만, 그것은 의지한다 예를 들어, list
반복자에 대해 발생합니다. 의 반복자는 랜덤 액세스가
std::string
때문에, 당신은 직접이 작업을 수행 할 수 있습니다
std::string::const_iterator it = s.begin() + (id-1);
(이 결국 임의 접근 반복자를 위해로 확장 무엇 std::advance
입니다.)
나는 표준 : : 문자열 할당 잊었다 연속적입니다 ... 그라 지! –
@PietroM :'string' 할당이 연속적인지 여부와 아무런 관련이 없습니다. iterator 유형과 관련이 있습니다. 'deque'는 연속적인 할당을 가지지 않지만 랜덤 액세스 반복자를 가지므로 반복자는'operator +'를가집니다. –
@PietroM : prego, ma effettivamente는 주사위를 가져 왔습니다. Steve Jessop. :) 문자열이 인접한 메모리 할당을 보장한다는 사실은 포인터를 사용하여 문자열 내부를 이동할 수있게합니다 (예 :'& (s [0]) '로 얻음). –