我的循环范围不起作用
My range for loop doesn't work
我必须打印出向量的大小和它里面的所有内容。但是我的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:
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;
}
// ...
}
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- 子类化 STL 容器:范围构造函数不起作用
- 基于范围的循环中的const参考不起作用
- 自动和范围内 for 循环 C++11 不起作用
- 为什么基于指针交换两个值在函数范围之外不起作用?
- 字符串下标超出范围.我不知道如何使用字符索引数组,所以我使用了(无符号整数),但它不起作用
- 我的循环范围不起作用
- 循环范围在使用索引元素时不起作用
- toupper() 在 for 范围循环中不起作用