【发布时间】:2010-12-29 14:37:50
【问题描述】:
我对如何获取集合中的元素感到困惑。我想我必须使用迭代器,但如何逐步完成它?
【问题讨论】:
-
以下两个答案都是正确的,但更直接一点:使用递增 (++) 和递减 (--) 运算符在结果集中向前或向后移动迭代器。
我对如何获取集合中的元素感到困惑。我想我必须使用迭代器,但如何逐步完成它?
【问题讨论】:
将type 替换为例如int.. 并将var 替换为集合的名称
for (set<type>::iterator i = var.begin(); i != var.end(); i++) {
type element = *i;
}
最好的方法是使用boost::foreach。上面的代码将简单地变成:
BOOST_FOREACH(type element, var) {
/* Here you can use var */
}
您也可以这样做#define foreach BOOST_FOREACH,以便您可以这样做:
foreach(type element, var) {
/* Here you can use var */
}
例如:
foreach(int i, name_of_set) {
cout << i;
}
【讨论】:
使用迭代器:
std::set<int> si;
/* ... */
for(std::set<int>::iterator it=si.begin(); it!=si.end(); ++it)
std::cout << *it << std::endl;
请注意,MSDN 和 cplusplus.com 等许多参考资料都提供了示例 - one example。 ;)
【讨论】:
要列出集合中的所有元素,您可以执行以下操作:
#include <iostream>
#include <set>
using namespace std;
int main ()
{
int myints[] = {1,2,3,4,5};
set<int> myset (myints,myints+5);
set<int>::iterator it;
cout << "myset contains:";
for ( it=myset.begin() ; it != myset.end(); it++ )
cout << " " << *it;
cout << endl;
return 0;
}
要检查集合中是否有特定元素,您可以使用集合 STL 类中的 find() 方法
【讨论】:
对于 C++11 及更高版本:
std::set<int> my_set;
for (auto item : my_set)
std::cout << item << endl;
【讨论】:
我喜欢使用 C++0x lambda 语法在 VS2010 Beta2 中看到的内容:
std::for_each( s.begin(), s.end(),
[](int value)
{
// what would be in a function operator() goes here.
std::cout << value << std::endl;
} );
【讨论】:
set<int> os;
for (auto itr = os.begin(); itr != os.end() ; ++itr) cout << *itr << endl;
【讨论】: