C++ 基于范围的for循环从1开始,而不是从0开始?

C++ 基于范围的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

我刚刚开始使用基于范围的for循环来简化使用模板时的代码。我遇到了一个奇怪的错误,不确定这是我遗漏的还是编译器出错了。我已经写了一段代码来说明我的问题以及输出。这些都显示在下面

注意:我在windows
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;istd::cout
i
是数组/向量中元素的值,而不是索引。它从1开始,因为这是第一个元素的值。尝试用
{3,2,1,4,5}
初始化数组。这是怎么回事?哇,所有对
std::endl
的调用!该流肯定会被彻底清除!(只需使用
”\n
;这里需要的就是这些)
i
是数组/向量中元素的值,而不是索引。它从1开始,因为这是第一个元素的值。请尝试使用
{3,2,1,4,5}初始化数组
。怎么样?哇,所有那些对
std::endl
的调用!那条流肯定会被彻底清除!(只需使用
”\n
;这里需要的就是这些)谢谢你的帮助,我现在觉得有点傻:)谢谢你的帮助,我现在觉得有点傻:)