Можно ли получить указатель фрагмента непрерывной памяти в std :: vector <char>в C ++? - PullRequest
3 голосов
/ 19 августа 2010

Я переместил свой код, чтобы использовать std::vector<char> вместо char *mem = malloc(...), но теперь я столкнулся с проблемой, что я могу получить доступ к векторным данным только через operator [], но не через указатель.

Я не могу написать что-то вроде:

std::vector<char> data;
fill_data(data);
char *ptr = data;

Прежде чем я смог сделать это:

char *data = malloc(100);
fill_data2(data);
char *ptr = data;

Есть идеи, есть ли еще доступ к данным в vector через указатель?

Спасибо, Бода Цидо.

Ответы [ 3 ]

8 голосов
/ 19 августа 2010

Стандартный способ доступа к векторным данным - использовать

&data[0]
2 голосов
/ 19 августа 2010

Конечно. Для этого был разработан вектор:

char * p = &(myVector[0]) ;

А теперь p указывает на первый элемент в векторе, и вы можете получить доступ к каждому элементу, играя с указателем, как в C.

0 голосов
/ 19 августа 2010

Вы можете написать этот код совершенно легально.Все, что вам нужно сделать, это изменить fill_data, чтобы получить std::vector<T>&.Конечно, если это внешний C API, то у вас нет большого выбора в этом вопросе.

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