나는 종종 begin iterator와 end iterator에 의존하는 std 알고리즘을 사용하고있다. 표준에는 컨테이너를 인수로 사용하는 오버로드가 포함되지 않는 이유는 무엇입니까 (반복기가 아닌). 이와 같은 것을 표준에 포함시키지 않는 기술적 인 이유가 있습니까?STL의 컨테이너 기반 오버로드
template <typename ContainerT, typename ValueT>
typename ContainerT::iterator find(ContainerT& container, const ValueT& value)
{
return std::find(begin(container), end(container), value);
}
전체 벡터를 검색 할 때 매우 편리합니다. 전체 컨테이너에 대해 반복하지 않으려는 경우에 대비하여 명시 적 반복기 버전이 여전히 필요하다는 것을 알고 있습니다.
std::vector<std::string> v;
v.push_back("foo");
v.push_back("bar");
std::find(v.begin(), v.end(), "bar");
find(v, "bar"); // much nicer! :)
결과를 이해하려면 여전히 컨테이너의'end()'함수에 접근 할 필요가 있습니다. 대체로, 이것으로부터 얻을 수있는 것은 거의 없습니다. 라이브러리에는 이미 * 훌륭한 도구 모음이 하나씩 있습니다. 프로젝트에 유용 할 수있는 단축키를 직접 만들 수 있습니다. –
바라건대 언젠가는 가능할 겁니다. 내 말에 "원거리"버전을 계속 사용할 예정입니다 ... –