Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何迭代std::set?_C++_Set_Iteration - Fatal编程技术网

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++;
}