我的循环范围不起作用

My range for loop doesn't work

本文关键字:不起作用 范围 循环 我的      更新时间:2023-10-16

我必须打印出向量的大小和它里面的所有内容。但是我的for循环没有迭代,它没有向上1,而是在整个循环中一直保持0的值

#include "stdafx.h"
#include <string.h>
#include <string>
#include <iostream>
#include <cctype>
#include <vector>
#include <list>
using std::string;
using std::vector;
  vector<int> v2(10);
      for( auto i : v2)
      {
          if( i == 0 )
          {
             std::cout << v2.size() << std::endl;
          }
         std::cout << "Element value " << (i) << " is " << v2[i] << std::endl;
      }

所以我只想在开始时打印一次大小。然后打印出每个元素的值,我知道默认值是0。但是它只输出了9次"Element value 0 is 0"

如果您想首先打印出vector的大小,那么将这个输出语句放在基于range的for语句

之前
std::vector<int> v2(10);
std::cout << v2.size() << std::endl;
size_t i = 0;
for ( auto x : v2 )
{
     std::cout << "Element value " << i++ << " is " << x << std::endl;
}

但是如果你使用计数,那么最好使用普通的for语句

std::vector<int> v2(10);
std::cout << v2.size() << std::endl;
for ( std::vector<int>::size_type i = 0; i < v2.size(); i++ )
{
     std::cout << "Element value " << i << " is " << v2[i] << std::endl;
}

您的问题表明您希望以不同的方式对待第一个元素。这不适用于开箱即用的基于范围的for循环。您有两个选项:

  1. 使用一个额外的变量来记住是否进行了第一次迭代。
  2. 使用传统的循环,使用索引变量或迭代器。

示例1:

bool first_iteration = true;
for( auto i : v2)
{
    if (first_iteration)
    {
       std::cout << v2.size() << std::endl;
       first_iteration = false;
    }
    // ...
}

示例2:

for (auto iter = v2.begin(); iter != v2.end(); ++iter)
{
    if (iter == v2.begin())
    {
       std::cout << v2.size() << std::endl;
    }
    // ...
 }