我正在学习C ++(对JavaScript很有信心),但是找不到与JS array.length;
等效的C ++。我想要一种基于数组长度的遍历数组的简单方法吗?
我已经遵循了许多教程,但是所有要求在循环中手动声明数组长度(或将其推送到函数中)的接缝是什么?
下面的代码出错,添加#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;
}
}
答案 0 :(得分:8)
对于像这样的C样式数组,可以使用range-based for
loops:
for (int value : shoppingList)
{
std::cout << value << '\n';
}
关于从数组中获取元素的数量,有一个“技巧”:您知道数组本身的大小,并且知道数组中每个元素的大小。这意味着,如果将数组的大小除以每个元素的大小,将得到元素的数量。
简而言之
size_t numberElements = sizeof shoppingList / sizeof shoppingList[0];
重要说明:此“技巧”仅适用于实际数组!一旦数组衰减到指针(指向它的第一个元素,通常会发生),剩下的就是指针。无法获取它指向的内存大小,因此无法使用此“技巧”。
正如我的评论中所述,“最佳”解决方案是使用std::array
或std::vector
。
答案 1 :(得分:1)
内置类型在C ++中没有成员函数。但是,有一个非成员std::size(array)
函数:
for (std::size_t i{}; i != std::size(shoppingList); ++i) {
// ...
}
请注意,计数器是usinf std::size_t
,以匹配std::size(...)
的结果的正负号。另外,请不要使用其他答案中建议的sizeof
hack:这是一个陷阱!将指针传递给cde时,它会很高兴地进行编译,但也会产生错误的结果。
当然,在C ++中(包括数组)迭代范围的惯用方式是(假设您只需要值,而不需要它们的位置):
for (int val: shoppingList) {
// ...
}
答案 2 :(得分:0)
数组没有直接的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;
}
}
答案 3 :(得分:0)
您可以执行类似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;
}