调用'begin(int [n])'没有匹配函数
no matching function for call to 'begin(int [n])'
获取错误
no matching function for call to 'begin(int [n])'
我正在使用向量和数组以及集合,但无法找出错误的原因
P。我在谷歌上搜索了一下,但也找不到任何相关的东西。我试着调试它,但做不到。这是我的密码!
#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 Happyn"; }
else if (!flag) {
cout << "Poor Chefn";
}
}
return 0;
}
您的问题是可变大小的数组,不是C++标准的一部分,并且您正在代码中使用它。
使用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]); }
看起来您正在尝试使用一个数组来填充CCD_ 1。这可以很容易地通过std::iota。也就是说,以下内容相当于您编写的
for loop
。std::iota(a.begin(), a.end(), 0);
其次,你正在做这么多复制,这看起来不像好的算法。特别是,应对集合
sa
,并再次将其应对回另一个向量(vec
(。这绝对不是你我想是想要。您不需要在矢量/阵列
a
上使用std::find
。既然是按排序数组索引和阵列之间的关系元素具有差异1
,请利用此信息查找索引。
PS:不要使用#include<bits/stdc++.h>
,请参阅本文了解更多信息和使用命名空间std;不是一个好的编码实践。
相关文章:
- 调用'begin(int [n])'没有匹配函数
- 有没有函数可以在擦除 c++ 中获取 deque.begin() 的 int 值?
- 错误:调用'begin(long double [nPoints])'没有匹配函数;使用硬编码的 int 与整数变量初始化向量
- 使用 std::set 的 .begin() 和 .end() 函数会产生意想不到的结果
- 为什么 free 函数不能在 C 数组上运行,而 std::begin 在某些情况下可以在 C++14 中运行?
- 将模式包装为 std::begin; 返回 begin(c); 到函数中
- C++ 指针上的开始/结束 (arr) - 调用 'begin(int**&)' 没有匹配函数
- 如何使用begin()自由函数
- 成员函数 .begin() 和 std::begin()
- 非成员函数 begin()/cbegin() 及其 constexpr-ness
- 使用 C++11 的 begin() 和 end() 函数通过参数确定数组维度
- 调用 'begin(int**&)' 没有匹配函数
- 避免通用容器中 begin() 和 end() 函数的重复代码
- begin() 和 end() 函数不应该是模板类 Vector 的成员函数吗?
- 迭代一个STL容器,而不是从.begin()函数开始
- Iterator::Begin()函数错误
- 为我的向量包装器和迭代器返回'begin'和'end'函数返回什么?
- C++11 std::begin 不适用于传递给模板函数的 int[]
- 从特定位置调用Upper_bound函数,而不是使用data.begin()
- C++名为begin()问题的成员函数