基于范围的 for 循环从 1 而不是 0 开始?
Range based for loop starts at one instead of zero?
我刚刚开始使用基于范围的 for 循环来简化我在使用模板时的代码。我遇到了一个奇怪的错误,我不确定这是我遗漏的东西还是编译器出错了。我写了一段代码来说明我遇到的问题以及输出。这些如下所示。
注意: 我在 windows g++ (rev5, Built by MinGW-W64 project) 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
如何从 1 而不是 0 开始?我本以为它会像描述的那样表现 here.
我认为你没有正确理解语法
for (auto i : x)
这里i
不是数组的索引,它是向量x
中的实际元素。
所以它正在正确地完成它的工作。
"i" 是数组中的实际值而不是索引。所以它在第一列中打印 x[1] 到 x[5],在第二列中打印 1 到 5。要访问这些值,只需打印 "i"。
for (auto i : x)
创建 x 中元素的副本以在 for 循环中使用。请改用迭代器按索引访问元素。
for (size_t i = 0; i < x.size(); i++) {
std::cout << x[i] << "\t" << i << std::endl;
}
我刚刚开始使用基于范围的 for 循环来简化我在使用模板时的代码。我遇到了一个奇怪的错误,我不确定这是我遗漏的东西还是编译器出错了。我写了一段代码来说明我遇到的问题以及输出。这些如下所示。
注意: 我在 windows g++ (rev5, Built by MinGW-W64 project) 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
如何从 1 而不是 0 开始?我本以为它会像描述的那样表现 here.
我认为你没有正确理解语法
for (auto i : x)
这里i
不是数组的索引,它是向量x
中的实际元素。
所以它正在正确地完成它的工作。
"i" 是数组中的实际值而不是索引。所以它在第一列中打印 x[1] 到 x[5],在第二列中打印 1 到 5。要访问这些值,只需打印 "i"。
for (auto i : x)
创建 x 中元素的副本以在 for 循环中使用。请改用迭代器按索引访问元素。
for (size_t i = 0; i < x.size(); i++) {
std::cout << x[i] << "\t" << i << std::endl;
}