如何获得指向std :: vector中第一个元素的指针?

33 c++ vector

我想std::vector<char>使用write具有此原型的函数将数据从一个套接字写入套接字:

ssize_t write(int, const void *, size_t);
Run Code Online (Sandbox Code Playgroud)

此函数的第二个参数必须是指向第一个元素的指针std::vector<char>.如何获得指向此元素的指针?

我试过std::vector::front但这会返回一个引用,而我需要一个指针.

Luc*_*ton 54

C++ 11具有vec.data()以下优点:即使向量为空,调用也是有效的.

  • 这是正确的答案.如果你写someFunc(my_vec.size(),&my_vec [0]),那么你有未定义的行为.在这里几乎每个答案都同样如此.您不能在空向量上取消引用.begin(),并且不在空向量上定义.front().只有someFunc(my_vec.size(),my_vec.data())才能保证正常工作. (4认同)

Oli*_*rth 32

&mv_vec[0]
Run Code Online (Sandbox Code Playgroud)

要么

&my_vec.front()
Run Code Online (Sandbox Code Playgroud)

  • .data()(C++ 11)应该是首选.如果数组为空,则mv_vec [0]不起作用. (6认同)
  • @TarmoPikaro 你还需要检查尺寸。如果“std::vector::size”为零,则无法取消引用“std::vector::data”的结果。`std::vector::data` 是首选,因为如果向量为空,它不会像 `&amp;v[0]` 那样导致未定义的行为。 (2认同)
  • 你是对的,但如果你在 for 循环中做了一些事情,那么如果我很懒 - 我不想对零大小向量进行额外检查。 (2认同)

Arm*_*yan 5

my_vec.empty() ? 0 : &my_vec.front()
Run Code Online (Sandbox Code Playgroud)

如果你想std::out_of_range在向量为空时抛出一个,你可以使用

&my_vec.at(0)
Run Code Online (Sandbox Code Playgroud)