Подтвердить что ты не робот

Получение массива из std: vector

Каков самый простой способ получить массив char из вектора?

То, что я делаю, - это инициализация строки с использованием итераторов начала и конца вектора, а затем получение .c_str() из этой строки. Существуют ли другие эффективные методы?

4b9b3361

Ответ 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)

  • будьте осторожны относительно удержания указателей на эти данные, поскольку указатель может быть недействительным, если вектор изменен.

Ответ 2

std::vector<char> chars;
char* char_arr = chars.data(); // &chars[0]