为什么我不能访问这个 C++ 数组的大小?
Why can't I access the size of this C++ array?
我是 C++ 的新手,我正在尝试编写一个函数来解决 this 挑战。我的代码如下所示:
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
void printKMax(int arr[], int n, int k){
deque<int> subarray;
int i = arr.size();
int maxValues[n];
while(i >= 0) {
while (subarray.size() < n) {
subarray.push_back(arr[i]);
arr.pop();
--i;
}
maxValues.push(max_element(begin(subarray), end(subarray)));
subarray.pop_front();
}
for (array<int>::iterator it=maxValues.begin(); it!=maxValues.end();
it++) {
cout << maxValues[*it] << " ";
}
}
int main(){
int t;
cin >> t;
while(t>0) {
int n,k;
cin >> n >> k;
int i;
int arr[n];
for(i=0;i<n;i++)
cin >> arr[i];
printKMax(arr, n, k);
t--;
}
return 0;
}
除其他外,此代码抛出一条错误消息:
"request for member ‘size’ in ‘arr’, which is of non-class type
‘int*’ int i = arr.size();"
谁能帮我理解这是什么意思?我是否试图从 class 外部引用某些内容,以便我需要使用指针?数组的声明方式有问题吗?
提前致谢!
C 样式数组不是对象,您不能对其调用 size
。它退化为一个指针,如果你在这里传递它
void printKMax(int arr[], int n, int k){
那么这个函数连大小都不知道。要解决这个问题,您需要单独传递大小,作为另一个参数。或者,您可以只使用 std::vector
之类的数据结构,在这种情况下,我建议您不要使用普通数组。你会得到 std::vector<int> arr;
而不是 int arr[n];
。然后,您可以在 printKMax
函数中查询 std::vector
的 size。访问向量使用与访问数组相同的语法,填充向量的工作方式与您现在的操作方式类似,使用 cin >> arr
.
你可以使用这个语句来获取数组的长度
int length = (sizeof(arr)/sizeof(*arr));
我是 C++ 的新手,我正在尝试编写一个函数来解决 this 挑战。我的代码如下所示:
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
void printKMax(int arr[], int n, int k){
deque<int> subarray;
int i = arr.size();
int maxValues[n];
while(i >= 0) {
while (subarray.size() < n) {
subarray.push_back(arr[i]);
arr.pop();
--i;
}
maxValues.push(max_element(begin(subarray), end(subarray)));
subarray.pop_front();
}
for (array<int>::iterator it=maxValues.begin(); it!=maxValues.end();
it++) {
cout << maxValues[*it] << " ";
}
}
int main(){
int t;
cin >> t;
while(t>0) {
int n,k;
cin >> n >> k;
int i;
int arr[n];
for(i=0;i<n;i++)
cin >> arr[i];
printKMax(arr, n, k);
t--;
}
return 0;
}
除其他外,此代码抛出一条错误消息:
"request for member ‘size’ in ‘arr’, which is of non-class type ‘int*’ int i = arr.size();"
谁能帮我理解这是什么意思?我是否试图从 class 外部引用某些内容,以便我需要使用指针?数组的声明方式有问题吗?
提前致谢!
C 样式数组不是对象,您不能对其调用 size
。它退化为一个指针,如果你在这里传递它
void printKMax(int arr[], int n, int k){
那么这个函数连大小都不知道。要解决这个问题,您需要单独传递大小,作为另一个参数。或者,您可以只使用 std::vector
之类的数据结构,在这种情况下,我建议您不要使用普通数组。你会得到 std::vector<int> arr;
而不是 int arr[n];
。然后,您可以在 printKMax
函数中查询 std::vector
的 size。访问向量使用与访问数组相同的语法,填充向量的工作方式与您现在的操作方式类似,使用 cin >> arr
.
你可以使用这个语句来获取数组的长度
int length = (sizeof(arr)/sizeof(*arr));