声明迭代器的正确方法是什么?
What is the correct way of declaring an iterator?
我想知道使用
是否有任何区别
std::set<int,std::greater<int>>::iterator itr;
和
std::set<int>::iterator itr;
我在下面的代码中尝试了其中的两个,结果是一样的,我想知道一个和另一个之间有什么区别,或者是否有任何情况我应该需要使用一个在另一个之上(当使用 STL 库或其他情况时)。
代码:
#include<iostream>
#include<iterator>
#include<set>
int main(){
std::set<int,std::greater<int>> s1;
s1.insert(40);
s1.insert(30);
s1.insert(60);
s1.insert(20);
s1.insert(50);
s1.insert(10);
// std::set<int>::iterator itr;
std::set<int,std::greater<int>>::iterator itr;
std::cout<<"\nThe set s1 is: \n";
for(itr=s1.begin();itr!=s1.end();itr++){
std::cout<<*itr<<" ";
}
std::cout<<"\n";
}
std::set<int>::iterator itr;
错误。
默认情况下,它恰好适用于 GCC、Clang 和 MSVC。
但是例如如果我启用 GCC 的迭代器调试 (-D_GLIBCXX_DEBUG
),它会停止编译。
通常您不需要手动拼写迭代器类型。你可以做到 for (auto itr = s1.begin(); ...)
。或者,如果需要创建未初始化的迭代器,decltype(s1)::iterator itr;
.
我想知道使用
是否有任何区别std::set<int,std::greater<int>>::iterator itr;
和
std::set<int>::iterator itr;
我在下面的代码中尝试了其中的两个,结果是一样的,我想知道一个和另一个之间有什么区别,或者是否有任何情况我应该需要使用一个在另一个之上(当使用 STL 库或其他情况时)。
代码:
#include<iostream>
#include<iterator>
#include<set>
int main(){
std::set<int,std::greater<int>> s1;
s1.insert(40);
s1.insert(30);
s1.insert(60);
s1.insert(20);
s1.insert(50);
s1.insert(10);
// std::set<int>::iterator itr;
std::set<int,std::greater<int>>::iterator itr;
std::cout<<"\nThe set s1 is: \n";
for(itr=s1.begin();itr!=s1.end();itr++){
std::cout<<*itr<<" ";
}
std::cout<<"\n";
}
std::set<int>::iterator itr;
错误。
默认情况下,它恰好适用于 GCC、Clang 和 MSVC。
但是例如如果我启用 GCC 的迭代器调试 (-D_GLIBCXX_DEBUG
),它会停止编译。
通常您不需要手动拼写迭代器类型。你可以做到 for (auto itr = s1.begin(); ...)
。或者,如果需要创建未初始化的迭代器,decltype(s1)::iterator itr;
.