C++ 如何迭代std::set?
我有以下代码:C++ 如何迭代std::set?,c++,set,iteration,C++,Set,Iteration,我有以下代码: std::set<unsigned long>::iterator it; for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it) { u_long f = it; // error here } std::set::iterator; for(it=SERVER_IPS.begin();it!=SERVER_IPS.end();++it){ u_long f=it;//此处出错 } 没有->
std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it) {
u_long f = it; // error here
}
std::set::iterator;
for(it=SERVER_IPS.begin();it!=SERVER_IPS.end();++it){
u_long f=it;//此处出错
}
没有->first
值。
如何获取该值?必须取消对迭代器的引用才能检索集合的成员
std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it) {
u_long f = *it; // Note the "*" here
}
只需在
之前使用*
:
set<unsigned long>::iterator it;
for (it = myset.begin(); it != myset.end(); ++it) {
cout << *it;
}
set::迭代器;
for(it=myset.begin();it!=myset.end();+it){
cout如何迭代std::set?
int main(int argc,char *argv[])
{
std::set<int> mset;
mset.insert(1);
mset.insert(2);
mset.insert(3);
for ( auto it = mset.begin(); it != mset.end(); it++ )
std::cout << *it;
}
intmain(intargc,char*argv[])
{
std::设置mset;
mset.插入(1);
mset.插入(2);
mset.插入(3);
对于(自动it=mset.begin();it!=mset.end();it++)
std::coutC++11标准的另一个示例:
set<int> data;
data.insert(4);
data.insert(5);
for (const int &number : data)
cout << number;
设置数据;
数据。插入(4);
数据。插入(5);
用于(常量整数和编号:数据)
cout另外一件可能对初学者有用的事情是,由于std::set没有分配连续的内存块,如果有人想迭代到第k个元素,那么正常的方法将不起作用。
例如:
std::向量向量{1,2,3,4,5};
int k=3;
对于(自动itr=vec.begin();itr@Mr.C64与本例中的整型无关。值得注意的是,如果您打算修改容器,则需要使用第一个整型。对于谷歌来说,这就是。我认为C++11解决方案应该与参考(auto&f)结合使用。对于大多数情况更好。对于这个特定的情况也是如此。嗨,Rob,如果我想引用服务器IP中的元素而不是声明一个新的u_长变量呢?我可以使用u_长&f=*It;?如果不可以,我该怎么办?@BioCoder-你可以使用一个引用变量,但它必须是一个常量引用变量,就像这样:const u长&f=*It;
。只是一个小提示:通常首选在for循环中使用++it,而不是它++,以避免迭代器的一个额外副本。甚至在(auto i:mset)std::cout中使用
set<int> data;
data.insert(4);
data.insert(5);
for (const int &number : data)
cout << number;
std::vector<int > vec{1,2,3,4,5};
int k=3;
for(auto itr=vec.begin();itr<vec.begin()+k;itr++) cout<<*itr<<" ";
std::unordered_set<int > s{1,2,3,4,5};
int k=3;
int index=0;
auto itr=s.begin();
while(true){
if(index==k) break;
cout<<*itr++<<" ";
index++;
}