Получение массива из std: vector - PullRequest
35 голосов
/ 27 ноября 2010

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

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

Ответы [ 2 ]

68 голосов
/ 27 ноября 2010

Это обсуждалось в Effective 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)

  • С осторожностью относитесь к указателям на эти данные, так как указатель может быть недействительным, если вектор был изменен.
41 голосов
/ 27 ноября 2010
std::vector<char> chars;
char* char_arr = chars.data(); // &chars[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...