假设我有一个无序集合
unordered_set<int> my_set; myset.insert(1); myset.insert(2); myset.insert(3);
我如何迭代它呢?我不需要以任何顺序迭代--只要我到达每个元素一次就行了。
for (int i = 0; i < my_set.size(); i++) cout << my_set[i];
都无济于事。
k7fdbhmy1#
您可以使用新的基于范围的for循环:
std::unordered_set<T> mySet; for (const auto& elem: mySet) { /* ... process elem ... */ }
或者,您可以使用更传统的基于迭代器的循环:
std::unordered_set<T> mySet; for (auto itr = mySet.begin(); itr != mySet.end(); ++itr) { /* ... process *itr ... */ }
或者,如果您没有auto支持,可能是因为您的编译器没有C++11支持:
auto
std::unordered_set<T> mySet; for (std::unordered_set<T>::iterator itr = mySet.begin(); itr != mySet.end(); ++itr) { /* ... process *itr ... */ }
brccelvz2#
就像其他系列一样:
for (auto i = my_set.begin(); i != my_set.end(); ++i) { std::cout << (*i) << std::endl; }
或者使用begin和end函数的重载的更通用的方法(您可以为自己的类型编写重载;它们也适用于普通数组):
begin
end
for (auto i = begin(my_set); i != end(my_set); ++i) { ... }
zaq34kh63#
到目前为止还没有使用过,但是我猜你可以像使用std::set一样使用迭代器:
std::set
for(unordered_set<int>::iterator a = my_set.begin(); a != my_set.end(); ++a) { int some_int = *a; }
3条答案
按热度按时间k7fdbhmy1#
您可以使用新的基于范围的for循环:
或者,您可以使用更传统的基于迭代器的循环:
或者,如果您没有
auto
支持,可能是因为您的编译器没有C++11支持:brccelvz2#
就像其他系列一样:
或者使用
begin
和end
函数的重载的更通用的方法(您可以为自己的类型编写重载;它们也适用于普通数组):zaq34kh63#
到目前为止还没有使用过,但是我猜你可以像使用
std::set
一样使用迭代器: