C++ 基于范围的for循环从1开始,而不是从0开始?
我刚刚开始使用基于范围的for循环来简化使用模板时的代码。我遇到了一个奇怪的错误,不确定这是我遗漏的还是编译器出错了。我已经写了一段代码来说明我的问题以及输出。这些都显示在下面 注意:我在windowsC++ 基于范围的for循环从1开始,而不是从0开始?,c++,c++11,mingw,mingw-w64,C++,C++11,Mingw,Mingw W64,我刚刚开始使用基于范围的for循环来简化使用模板时的代码。我遇到了一个奇怪的错误,不确定这是我遗漏的还是编译器出错了。我已经写了一段代码来说明我的问题以及输出。这些都显示在下面 注意:我在windowsg++(第5版,由MinGW-W64项目构建)4.8.1上使用Mingw64编译器,未使用--std=c++11标记进行优化编译 代码: #include <iostream> #include <array> #include <vector> int m
g++(第5版,由MinGW-W64项目构建)4.8.1上使用Mingw64编译器,未使用--std=c++11
标记进行优化编译
代码:
#include <iostream>
#include <array>
#include <vector>
int main()
{
// Declares an array of size 5 and of type int and intialises.
std::array<int,5> x = {1,2,3,4,5};
std::vector<int> y = {1,2,3,4,5};
// Prints each element
std::cout << "Array:" << std::endl;
std::cout << "x" << "\t" << "i" << std::endl;
for (auto i : x)
{
std::cout << x[i] << "\t" << i << std::endl;
}
std::cout << "Vector" << std::endl;
std::cout << "y" << "\t" << "i" << std::endl;
for (auto i : y)
{
std::cout << y[i] << "\t" << i << std::endl;
}
std::cin.get();
std::cin.get();
return 0;
}
Array:
x i
2 1
3 2
4 3
5 4
0 5
Vector
y i
2 1
3 2
4 3
5 4
1313429340 5
我假设向量和数组输出的最后一行都是溢出,请注意I
如何从一开始而不是从零开始??我会假设它的行为与所描述的一样。我认为您没有正确理解语法
for (auto i : x)
这里的i
不是数组的索引,而是向量x
中的实际元素。
因此,它的工作是正确的。我认为您没有正确理解语法
for (auto i : x)
这里的i
不是数组的索引,而是向量x
中的实际元素。
因此它的工作是正确的。“i”是数组中的实际值,而不是索引。因此,它在第一列中打印x[1]到x[5],在第二列中打印1到5。要访问这些值,只需打印“i” “i”是数组中的实际值,而不是索引。因此,它在第一列中打印x[1]到x[5],在第二列中打印1到5。要访问这些值,只需打印“i”
创建要在for循环中使用的x元素的副本。而是使用迭代器通过元素的索引访问元素
for (size_t i = 0; i < x.size(); i++) {
std::cout << x[i] << "\t" << i << std::endl;
}
for(size_t i=0;i
for (size_t i = 0; i < x.size(); i++) {
std::cout << x[i] << "\t" << i << std::endl;
}
for(size_t i=0;i std::couti
是数组/向量中元素的值,而不是索引。它从1开始,因为这是第一个元素的值。尝试用{3,2,1,4,5}
初始化数组。这是怎么回事?哇,所有对std::endl
的调用!该流肯定会被彻底清除!(只需使用”\n
;这里需要的就是这些)i
是数组/向量中元素的值,而不是索引。它从1开始,因为这是第一个元素的值。请尝试使用{3,2,1,4,5}初始化数组
。怎么样?哇,所有那些对std::endl
的调用!那条流肯定会被彻底清除!(只需使用”\n
;这里需要的就是这些)谢谢你的帮助,我现在觉得有点傻:)谢谢你的帮助,我现在觉得有点傻:)