获取错误
no matching function for call to 'begin(int [n])'
我正在使用 vectors 和 array 和 set ,但是找不到错误的原因。
附言-我搜索了它,但也找不到任何相关的信息。
我尝试调试它,但无法完成。
这是我的代码!
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int n, flag = 0;
scanf("%d", &n);
int a[n];
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int index1 = distance(begin(a), find(begin(a), end(a), 2));
std::set<int> sa(a, a + n);
std::vector<int> vec(sa.size());
std::copy(sa.begin(), sa.end(), vec.begin());
int arr[vec.size()];
copy(vec.begin(), vec.end(), arr);
for (int i = 0; i < vec.size(); i++) {
for (int j = 0; j < n; j++) {
if (arr[i] == a[j]) {
int index1 = distance(begin(a), find(begin(a), end(a), i));
int index2 = distance(begin(a), find(begin(a), end(a), j));
if (index1 < n && index2 < n) {
flag = 1;
break;
}
}
}
}
if (flag) { cout << "Truly Happy\n"; }
else if (!flag) {
cout << "Poor Chef\n";
}
}
return 0;
}
答案 0 :(得分:1)
您的问题是可变大小的数组,are not part of C++ standards,您正在代码中使用它。
使用std::vector<>代替它们。那就是说,改变这个
int a[n]; // to ----------------------------> std::vector<int> a(n);
和这一行
std::set<int> sa(a, a + n); // to ----------> std::set<int> sa(a.begin(), a.end());
也
int arr[vec.size()]; // to -----------------> std::vector<int> arr(vec.size());
copy(vec.begin(), vec.end(), arr); // to ---> copy(vec.begin(), vec.end(), arr.begin());
然后您的代码将起作用。
但是
在这里
for (int i = 0; i < n; i++) { scanf("%d", &a[i]); }
您似乎正在尝试用数组填充元素
0, 1, 2,... , n-1
。这很容易做到
std::iota。也就是说,以下内容等同于您编写的for loop
。
std::iota(a.begin(), a.end(), 0);
其次,您正在进行大量复制,看起来并不像
好的算法。特别是,应对 set sa
,然后再次将其应对回另一个向量(vec
)。绝对不是你
我想吧。
您不需要在向量/数组std::find
上使用a
。因为它是
按 array index 和 array之间的关系排序
元素与1
不同,请利用此信息查找
索引。
PS :请勿使用#include<bits/stdc++.h>
,请参见this post for more info和
using namespace std;并不是良好的编码习惯。