C++ 如何在for循环中创建自动迭代,该循环将指针而不是值分配给它

C++ 如何在for循环中创建自动迭代,该循环将指针而不是值分配给它,c++,iteration,auto,C++,Iteration,Auto,我想创建如下自动迭代循环: std::vector<sometype> vector1; for(auto it : vector1) { if(&it == &vector1.at(4)) //do something... else continue; } std::vector1; 用于(自动it:vector1) { if(&it==&vector1.at(4)) //做点什么。。。 其他的 继续; } 但我发现,当它等

我想创建如下自动迭代循环:

std::vector<sometype> vector1;
for(auto it : vector1)
{
   if(&it == &vector1.at(4))
      //do something...
   else
      continue;
}
std::vector1;
用于(自动it:vector1)
{
if(&it==&vector1.at(4))
//做点什么。。。
其他的
继续;
}
但我发现,当它等于向量1.at(4)时,它的地址与向量1.at(4)的地址不同。我如何处理循环,该循环将分配给“it”的不是值,而是当前指向的值的地址。

您可以使用引用(将
&
添加到变量声明)来执行类似的操作

std::vector<sometype> vector1;
for(auto& it : vector1) // add &
{
   if(&it == &vector1.at(4))
      //do something...
   else
      continue;
}
std::vector1;
for(auto&it:vector1)//添加&
{
if(&it==&vector1.at(4))
//做点什么。。。
其他的
继续;
}

将代码视为算法的伪代码,它基本上是试图解决

  • 检查(通过O(n)而不是O(1)成本)向量是否至少有5个元素。
    • 如果
      true
      ,则转到2
    • 否则什么也不做
  • 用第五个元素做点什么
  • 如果确实是这种情况,您实际上不需要for循环,您可以在有条件地访问(O(1)随机访问)第5个元素之前查询向量的大小,以
    //执行某些操作…

    #include <iostream>
    #include <string>
    #include <vector>
    
    int main() {
        const std::vector<std::string> v{"a", "b", "c", "d", "e", "f"};
        if (v.size() > 4) { 
            auto s = v[4];
            // do something with the 5th element, as it exists.
            std::cout << e; // d
        }
    }
    
    #包括
    #包括
    #包括
    int main(){
    常数std::向量v{“a”、“b”、“c”、“d”、“e”、“f”};
    如果(v.size()>4){
    自动s=v[4];
    //对第五个元素做一些事情,因为它存在。
    
    std::cout在基于for循环的范围内

    std::vector<sometype> vector1;
    for(auto it : vector1)
    {
       if(&it == &vector1.at(4))
          //do something...
       else
          continue;
    }
    
    请注意,带有continue的else语句没有太大意义。您可以简单地编写

    std::vector<sometype> vector1;
    for( auto &value : vector1)
    {
       if( &value == &vector1.at(4))
          //do something...
    }
    
    std::vector1;
    用于(自动和值:矢量1)
    {
    if(&value==&vector1.at(4))
    //做点什么。。。
    }
    
    虽然目前还不清楚,当向量的一个元素满足条件时,为什么要使用基于范围的for循环。

    下面的答案解释了如何执行此操作,但我可以问一下您为什么要执行此操作吗?例如,在这种特殊情况下,您可以直接使用
    /…使用
    vector.at(4)
    执行某些操作。
    std::vector<sometype> vector1;
    for( auto &value : vector1)
    {
       if( &value == &vector1.at(4))
          //do something...
    }