Как я могу получить указатель на первый элемент в std :: vector? - PullRequest
31 голосов
/ 11 сентября 2011

Я хочу записать данные из std::vector<char> в сокет, используя функцию write, которая имеет этот прототип:

ssize_t write(int, const void *, size_t);

Второй аргумент этой функции должен быть указателем напервый элемент в std::vector<char>.Как я могу получить указатель на этот элемент?

Я пытался std::vector::front, но это возвращает ссылку, а мне нужен указатель.

Ответы [ 5 ]

52 голосов
/ 11 сентября 2011

C ++ 11 имеет vec.data(), что дает преимущество в том, что вызов действителен, даже если вектор пуст.

31 голосов
/ 11 сентября 2011
&mv_vec[0]

или

&my_vec.front()

5 голосов
/ 11 сентября 2011
my_vec.empty() ? 0 : &my_vec.front()

Если вы хотите, чтобы std::out_of_range было выброшено, если вектор пуст, вы можете использовать

&my_vec.at(0)
2 голосов
/ 11 сентября 2011
&*my_vec.begin()

или

&mv_vec[0]
1 голос
/ 11 сентября 2011

Принимая адрес первого элемента, с &vec[0], в качестве стандарта (начиная с C ++ 03, я думаю), требуется непрерывное хранение std::vector элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...