我的循环范围不起作用

时间:2014-07-27 16:36:17

标签: c++

我必须打印出矢量的大小及其中的所有内容。但我的for循环不会迭代,它不会上升一个,而是保持整个循环的值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的每个元素值。但它只打印出“元素值0为0”9次。

2 个答案:

答案 0 :(得分:0)

如果您想首先打印出向量的大小,那么将此输出语句放在基于语句的范围之前

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

答案 1 :(得分:0)

您的问题表明您希望区别对待第一个元素。这不适用于基于范围的for循环开箱即用。您有两种选择:

  1. 使用额外的变量来记住是否进行了第一次迭代。
  2. 使用传统循环,使用索引变量或迭代器。
  3. 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;
        }
    
        // ...
     }