Ответ 1
Это обсуждалось в "Эффективном STL" Скотта Мейерса, что вы можете сделать &vec[0]
, чтобы получить адрес первого элемента std::vector
, а так как стандартный ограничивает векторы наличием непрерывной памяти, вы можете делать такие вещи, как это.
// some function
void doSomething(char *cptr, int n)
{
}
// in your code
std::vector<char> chars;
if (!chars.empty())
{
doSomething(&chars[0], chars.size());
}
Изменить: Из комментариев (спасибо casablanca)
- будьте осторожны относительно удержания указателей на эти данные, поскольку указатель может быть недействительным, если вектор изменен.