什么是std :: find的这个错误的优雅解决方案?

时间:2016-03-08 16:27:52

标签: c++ arrays c++11 std c++-standard-library

我有一个类,其中包含一个在编译时大小未知的数组。数组在构造函数中初始化。然后,我有另一个函数来检查元素是否在数组中:

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中编译代码。

编辑:我现在就知道了。但是,我怎样才能以优雅的方式做我想做的事情呢?

  
      
  1. 如果我使用指针而不是空数组,我就无法使用std :: find。
  2.   
  3. 如果我给我的数组任意大小,我就无法复制更大的数组。   我该怎么办?
  4.   

1 个答案:

答案 0 :(得分:2)

int tab[];

标准不允许空数组,但有些编译器作为扩展名。这并不能使它合法化。

  

如果我使用指针而不是空数组,我将无法使用std :: find。

不正确,您仍然可以使用std::finds是制表符数组的大小。)

  int *ptr = std::find(tab, tab + s, tdc_x);
  

如果我给我的数组任意大小,我将无法复制更大的数组。我该怎么办?

使用std::vector<int>,然后致电resize()