【问题标题】:Pass std::vector as const float *? [duplicate]将 std::vector 作为 const float *? [复制]
【发布时间】:2017-11-03 18:23:44
【问题描述】:

我的功能是:

void function(const float *, int sizeOfArray){...}

我的向量是:

std::vector<float> myVector(size, val);

我在文档中看到您可以使用 myVector[0] 作为标准 c++ 静态数组操作。

如何将该向量传递给该函数而不必将值复制到新的动态数组? (我想避免为此使用 new / delete)。

是不是有点像...?

function(myVector[0], size);

顺便说一下,我使用的是 C++11。

【问题讨论】:

  • function(myVector.data(), size);

标签: c++ arrays c++11 vector dynamic-arrays


【解决方案1】:

您可以使用std::vector::data(C++11 起)来获取指向底层数组的指针。

返回指向作为元素存储的底层数组的指针。指针是这样的范围 [data(); data() + size()) 始终是一个有效范围,即使容器是空的(在这种情况下 data() 是不可取消引用的)。

例如

function(myVector.data(), myVector.size());

是不是有点像...?

function(myVector[0], size);

myVector[0] 将返回元素(即float&amp;),而不是地址(即float*)。在 C++11 之前你可以通过&amp;myVector[0].

【讨论】:

  • &amp;myVector[0] 可用于所有 C++ 版本,而不仅仅是 C++11 之前的版本。 myVector.data() 也可以在 C++11 及更高版本中使用。
【解决方案2】:
function(myVector.data(), myVector.size());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 2019-04-23
    相关资源
    最近更新 更多