【问题标题】:How to pass vector as function argument to pointer [duplicate]如何将向量作为函数参数传递给指针[重复]
【发布时间】:2014-11-04 10:07:00
【问题描述】:

我尝试将向量作为函数参数传递给指针,但编译器总是返回错误。

错误:无法在赋值中将 'std::vector' 转换为 'float*'

当我以相同的方式传递数组时,它可以完美运行。那么这里有什么问题呢?是否可以将向量分配给指针?

vector <float> test;

class data {
    float *pointer;
    int size;
  public:
      void init(vector <float> &test, int number);
};

void data::init(vector <float> &test, int number)
{
    size= number;
    pointer = test;
}

【问题讨论】:

    标签: c++ class pointers vector arguments


    【解决方案1】:

    如果你想要一个指向由向量管理的数组的指针,那么就是

    pointer = test.data();                       // C++11 or later
    pointer = test.empty() ? NULL : &test[0];    // primeval dialects
    

    请注意,如果向量被销毁或重新分配其内存,这将失效。

    【讨论】:

    • 我会说 std::addressof 在旧情况下管理 operator &amp; 但它也是 C++11(是的,我知道,float 没有问题)...
    • “原始”版本需要检查是否为空。
    • @DonReba:好点。我很高兴我没有活在过去。
    • test.data() 有效,似乎我对重新分配没有问题。但是在我通过 test.clear() 销毁向量之前,是否可以确切地说不要销毁这个向量?
    • @astrak:需要明确的是,破坏并不是唯一的潜在问题。如果向量增长,那也会使您的指针失效。
    【解决方案2】:

    从C++11开始,你可以使用std::vector::data

    void data::init(std::vector<float> &test, int number)
    {
        size = number;
        pointer = test.data();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-17
      • 2013-01-27
      • 2013-03-16
      • 2021-07-18
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      相关资源
      最近更新 更多