2011-12-16 2 views
2

처음부터 반복하지 않고 std::string의 특정 문자에 대한 반복자가 필요합니다.std :: string의 특정 문자에 대한 반복자

이렇게하는 것이 가장 좋은 방법입니까?

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

답변

3

또한 간단하게 수행 할 수 있습니다

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

it는 랜덤 액세스 반복자 인 경우, advance 그렇지 않으면 (operator+를 사용하기 때문에이 더 많거나 std::advance의 동일한 성능 적게해야하지만, 그것은 의지한다 예를 들어, list 반복자에 대해 발생합니다. 의 반복자는 랜덤 액세스가

+0

나는 표준 : : 문자열 할당 잊었다 연속적입니다 ... 그라 지! –

+2

@PietroM :'string' 할당이 연속적인지 여부와 아무런 관련이 없습니다. iterator 유형과 관련이 있습니다. 'deque'는 연속적인 할당을 가지지 않지만 랜덤 액세스 반복자를 가지므로 반복자는'operator +'를가집니다. –

+1

@PietroM : prego, ma effettivamente는 주사위를 가져 왔습니다. Steve Jessop. :) 문자열이 인접한 메모리 할당을 보장한다는 사실은 포인터를 사용하여 문자열 내부를 이동할 수있게합니다 (예 :'& (s [0]) '로 얻음). –

4

std::string 때문에, 당신은 직접이 작업을 수행 할 수 있습니다

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

(이 결국 임의 접근 반복자를 위해로 확장 무엇 std::advance입니다.)

관련 문제