我有一个类,其中包含一个在编译时大小未知的数组。数组在构造函数中初始化。然后,我有另一个函数来检查元素是否在数组中:
class myClass
{
int tab[];
public:
myClass(int array[], int length)
{
std::copy(array, array + length, tab)
}
void myFunction()
{
int x = 8;
int *ptr = std::find(std::begin(tab), std::end(tab), tdc_x);
if (ptr) /* here goes my code */
}
};
我收到以下错误:
错误:没有匹配函数来调用'begin(int [0])'
上面的代码有什么问题?我知道我不能用指针使用std :: find,但我的数组是一个数组,而不是一个衰减的指针。
我跟着this示例。我还包括算法标头。我做错了什么?
我在C ++ 11中编译代码。
编辑:我现在就知道了。但是,我怎样才能以优雅的方式做我想做的事情呢?
- 如果我使用指针而不是空数组,我就无法使用std :: find。
- 如果我给我的数组任意大小,我就无法复制更大的数组。 我该怎么办?
醇>
答案 0 :(得分:2)
int tab[];
标准不允许空数组,但有些编译器作为扩展名。这并不能使它合法化。
如果我使用指针而不是空数组,我将无法使用std :: find。
不正确,您仍然可以使用std::find
(s
是制表符数组的大小。)
int *ptr = std::find(tab, tab + s, tdc_x);
如果我给我的数组任意大小,我将无法复制更大的数组。我该怎么办?
使用std::vector<int>
,然后致电resize()