을이 c.begin() + int_value
을 시도했지만 오류이 라인에 error: no match for ‘operator+’
있어 아니 내가 당신의 접근 방식을 선호하는 것이 있지만, int
는 거리가 질문에 begin()
와 반복자 사이 인 경우, 당신은 t를 얻을 수
c.begin() + int_value
또는
std::advance(c.begin(), int_value)
을 사용할 수 있습니다 그는 반복자입니다. 두 번째 버전은 랜덤 액세스 반복자가 아닌 반복자에 필요합니다.
당신의 개인적인 정성 (및 프로그램의 속도)을 고려하여 반복자를 어떤 형태로든 직접 돌려 주길 권한다.
이 방법 중 하나를 해결할 수있는 많은 인터페이스가 있습니다. 나는 "오래된 C의 방법"이라고 부르는 out 매개 변수에 의해 반환 될 것이다 :
bool find_stuff(stuff, container::iterator* out_iter) {
...
if(found && out_iter)
*out_iter = found_iter;
return found;
}
그것을 사용 :
container::iterator the_iter;
if(find_stuff(the_stuff, &the_iter)) ...
또는
if(find_stuff(the_stuff, 0)) // if you don't need the iterator
이 관용적 C++에서 아니지만, 리누스는 그것에 만족할 것입니다.
이론적으로 소리가 가능한 두 번째 버전은 boost::optional
과 같은 것을 사용하여 값을 반환합니다. 이 방법을 사용하면 값을 반환하거나 반환하지 않습니다.
boost::optional<container::iterator> find_stuff(stuff) {
...
if(found && out_iter)
return found_iter;
return boost::none;
}
사용 :
boost::optional<container::iterator> found = find_stuff(the_stuff);
if(found) {
do something with *found, which is the iterator.
}
또는
if(find_stuff(the_stuff)) ...
셋째 가능한 솔루션 즉, std::set::insert
길을 갈 것입니다.플래그와 값으로 구성된 한 쌍을 반환 :
std::pair<bool, container::iterator> find_stuff(stuff) {
...
return std::make_pair(found, found_iter);
}
사용 :
std::pair<bool, container::iterator> found = find_stuff(the_stuff);
if(found.first) ...
커스텀'find' 메소드는 아마도 아이템이 존재 하는지를 알아 내기 위해 반복자를 사용합니다; iterator가 있으면 그것을 사용하십시오. – tmpearce
@tmpearce 내 함수가 반복자를 반환하는 경우 쌍이 종료되지 않으면 어떻게 알 수 있습니까? – Kolyunya
'std :: set>가 더 적절한 컨테이너가 아니겠습니까? –