在C++中,建议通过数组循环的方式是什么?
What is the recommended way loop through an array in C++?
我正在学习C++(对JavaScript相当有信心(,但我找不到与JSarray.length;
相当的C++。我想要一种基于数组长度遍历数组的简单方法?
我已经遵循了许多教程,但所有接缝都需要在 for 循环中手动声明数组长度(或推送到函数中(?
下面的代码得到一个错误,添加 #include 会导致编译器错误 (DEV++(。
是否有C++或原因导致没有对数组长度的简单调用?
#include <iostream>
using namespace std;
int main () {
int shoppingList [3] = {1, 2, 3};
for (int i=0; i < shoppingList.size(); i++) {
cout << shoppingList[i] << endl;
}
}
对于像你这样的 C 样式数组,你可以使用基于范围的for
循环:
for (int value : shoppingList)
{
std::cout << value << 'n';
}
至于从数组中获取元素的数量,有一个"技巧":你知道数组本身的大小,你知道数组中每个元素的大小。这意味着如果将数组的大小除以每个元素的大小,您将获得元素的数量。
总之
size_t numberElements = sizeof shoppingList / sizeof shoppingList[0];
重要提示:此"技巧"仅适用于实际数组!一旦数组衰减到指针(指向它的第一个元素,这种情况经常发生(,你剩下的就是指针。没有办法得到它所指向的内存大小,这个"技巧"不能使用。
正如我在评论中提到的,"最佳"解决方案是使用std::array
或std::vector
.
内置类型没有具有C++的成员函数。但是,有一个非成员std::size(array)
函数:
for (std::size_t i{}; i != std::size(shoppingList); ++i) {
// ...
}
请注意,计数器是 usinfstd::size_t
以匹配std::size(...)
结果的符号性。另外,不要使用其他答案中建议的sizeof
黑客:这是一个陷阱!当将指针传递给它时,cde 会很乐意编译,但它也会产生错误的结果。
当然,在C++范围内迭代一个范围(包括数组(的惯用方法是(假设您只需要值而不是它们的位置(:
for (int val: shoppingList) {
// ...
}
数组没有直接 size(( 成员函数,你可以找到像这样的数组的大小int size = sizeof(arr)/sizeof(arr[0]);
并在 for 循环中使用它。
#include <iostream>
using namespace std;
int main () {
int shoppingList [3] = {1, 2, 3};
int size = sizeof(shoppingList)/sizeof(shoppingList[0]);
for (int i=0; i < size(); i++) {
cout << shoppingList[i] << endl;
}
}
你可以做类似 sizeof(A(/sizeof(A[0]( 的操作。这将为您提供数组中元素的总数。
让我们举一个例子 A = {1,2,3,4,5}//所有整数 如果你计算 sizeof(A(/sizeof(A[0](,它会给你 5,正如你所看到的,你不需要手动输入数组的大小。
希望这有帮助。 :)
#include <iostream>
using namespace std;
int main()
{
A = {1,2,3,4,5};
for (int i = 0; i< sizeof(A)/sizeof(A[0]); i++)
//whatever you want to do with this
return 1;
}
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 使用for循环检查数组中的重复项
- 并行用于C++17中数组索引范围内的循环
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 程序在遍历所有值之前离开循环. 数组的
- 在C++中循环数组时访问结构属性
- 如何创建循环数组
- 查找 for 循环数组C++中存在最大值和最小值的值
- 有没有办法在 c++ 中创建循环数组
- OpenMP-每个线程的循环/数组界限
- 循环数组 - 从最后一个跳到第一个,反之亦然
- 循环数组时显示'stack smashing detected abc2 terminated Aborted'
- 使用循环数组实现矢量
- 为什么在循环数组时会得到奇怪的整数
- 循环数组-超出值
- 用于循环数组赋值的C++.正在返回垃圾邮件
- 在RapidJson中循环数组并获取对象元素
- 对于循环数组迭代,if循环测试索引是否为真/假,计算结果不正确
- c++循环/数组
- 有没有一种方法可以简化这个c++整数循环数组?