我最近一直在努力学习C ++,并且做一些黑客对入门任务进行排名。我试图进行https://www.hackerrank.com/challenges/deque-stl挑战,但我对c ++语法和基础“数组”的使用非常不熟悉。如果我愿意,我至少会使用std :: array(虽然我知道这只是默认C数组的零开销包装)。
我的问题是:
#include <iostream>
#include <deque>
#include <vector>
#include <array>
#include <typeinfo>
using namespace std;
void printKMax(int (&arr)[n], int n, int k){
//Write your code here.
deque<int> d(arr);
cout << arr[3];
for(int i:d) {cout <<i;}
}
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;
}
我正在尝试将arr传递给printKMax,并将其作为参考接收。 我收到的错误是:
!‘arr’ was not declared in this scope
!‘n’ was not declared in this scope
!variable or field ‘printKMax’ declared void
!expected primary-expression before ‘int’
!expected primary-expression before ‘int’
如果我使用常量int,例如“5”,arr [5],它会通过。(在函数调用中也传递arr [5])。但如果我用n替换它,它就不起作用。
也就是说,此时,函数调用[不是定义]是printKMax(arr,n,k),我认为没有理由在这里添加arr [n](因为它已隐含在它被声明为:int arr [n])。我试图将它作为参考传递,而不会将其衰减成指针。我也把它传递给* arr,但没有成功。
我在网上看到它的重要性,将它保持为(&amp; arr)[100]或类似的东西,但在这里我有(&amp; arr)[n],它超出了范围。我很想写(&amp; arr)[],但是我得到了这个错误:
parameter ‘arr’ includes reference to array of unknown bound ‘int []’
提前致谢!另外,这只是数组的问题吗?如果我开始使用和来自例如boost库的数据结构,我会遇到类似的问题吗?
PS:忽略deque代码,我只是在玩,尝试使用与我传递的数组相同的元素初始化它。它可能是不兼容的,因为一个是std ::而另一个是默认数组,不幸的是......?