C++에서 반복자 선언을 구문 적으로 단축/단순화하는 방법이 있습니까? 일반적으로 나는 것 :더 쉬운 C++ STL 반복자 인스턴스화
vector<pair<string, int> > v;
vector<pair<string, int> >::iterator i;
나는 것 몇 가지 마법을 기대했다 :
이vector<pair<string, int> > v;
magic v::iterator i;
C++에서 반복자 선언을 구문 적으로 단축/단순화하는 방법이 있습니까? 일반적으로 나는 것 :더 쉬운 C++ STL 반복자 인스턴스화
vector<pair<string, int> > v;
vector<pair<string, int> >::iterator i;
나는 것 몇 가지 마법을 기대했다 :
이vector<pair<string, int> > v;
magic v::iterator i;
에서 C++ 11에는 세 가지 옵션이 있습니다 :
1. Typedef 벡터 인스턴스화
typedef std::vector<std::pair<std::string, int>> Vp;
Vp v;
Vp::iterator i;
2. decltype
std::vector<std::pair<std::string, int>> v;
decltype(v)::iterator i;
3. auto
std::vector<std::pair<std::string, int>> v;
auto i = v.begin();
나는 세 번째 옵션은 가장 일반적인, 관용적 사용 말하고 싶지만, 모두가 유효하며 첫 번째 옵션은 C++ 98에서도 작동합니다.
decltype은 제가 찾고있는 마법이었습니다. 오직 C++ 11에서의 동정. – Waslap
간단하게 다음 vector<pair<string, int> >
typedef vector<pair<string, int> > Vp; // vector of pair
그리고 별명에 대한 typedef
를 사용
Vp v;
Vp::iterator i;
C++ 11 :
using v = vector<pair<string, int> >;
using i = v::iterator;
매직 :
// vector of strings
typedef std::vector<std::string> str_vec;
// iterator
typedef str_vec::iterator str_vec_iter;
// constant iterator
typedef str_vec::const_iterator str_vec_citer;
// reverse iterator
typedef str_vec::reverse_iterator str_vec_riter;
// constant reverse iterator
typedef str_vec::const_reverse_iterator str_vec_criter
int main()
{
str_vec v = {"a", "b", "c"};
// writable iteration
for(str_vec_iter i = v.begin(); i != v.end(); ++i)
i->append("!");
// constant iteration
for(str_vec_citer i = v.begin(); i != v.end(); ++i)
std::cout << *i << '\n';
// constant reverse iteration
for(str_vec_criter i = v.rbegin(); i != v.rend(); ++i)
std::cout << *i << '\n';
}
특정 컨테이너 내가 그들의 형식 정의가 너무 일반적입니다 : 내가 사용하는
v _v;
i _i{ _v.begin() };
는 많은 타입 정의 내가 항상 사용하는 개인 헤더 파일들 (네임 스페이스는 자연스럽게).
그러나 C++ (11) 이래 그렇게 중요하지 않습니다 당신을 위해 유형을 추론 auto
키워드의 때문에 :
for(auto&& i: v)
std::cout << i << '\n';
C++ 11에서 당신은 쓸 수 있습니다 :
decltype(v)::iterator
C++ 11을 사용하는 경우 'auto'지정자를 확인하십시오. – Macmade
C++ 11을 사용한다면'auto i (v.begin());'이라고 말하면 컴파일러는'i'에 대해 올바른 타입을 추론합니다. http://en.cppreference.com/w/cpp/language/auto – dgnuff