我必须打印出矢量的大小及其中的所有内容。但我的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次。
答案 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的示例:
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;
}
// ...
}