Я пытаюсь использовать std::vector
в качестве char
массива.
Моя функция принимает пустой указатель:
void process_data(const void *data);
Прежде чем я просто использовал этот код:
char something[] = "my data here";
process_data(something);
Который работал как ожидалось.
Но теперь мне нужна динамичность std::vector
, поэтому я попробовал этот код вместо этого:
vector<char> something;
*cut*
process_data(something);
Вопрос в том, как передать вектор символов в мою функцию, чтобы я мог получить доступ к необработанным данным вектора (независимо от того, какой это формат - плавающие и т. Д.)?
Я попробовал это:
process_data(&something);
И это:
process_data(&something.begin());
Но он вернулся указатель на тарабарщину данных, а второй дал предупреждение: warning C4238: nonstandard extension used : class rvalue used as lvalue
.
vector<bool>
который является исключением из этого ответа (и не имеет непрерывного хранения в памятиbool
s).std::vector<bool>
потому чтоstd::vector<bool>
требует использования объекта-посредника, и этот прокси не может быть неявно преобразован в abool*
. В качестве обходного пути для этого, если вам нужна последовательностьbool
, лучше просто использоватьstd::vector<char>
. @Motti.data()
- я просто притворюсь, что я не видел это уродливое&*iterator
: Pdata()
живого? Если вектор никогда не изменяется ни больше, ни больше (с помощьюpush_back()
или других функций, в том числеreserve
), гарантируется ли, что указатель будет жить так же долго, как и вектор, указывая на правильное место?something.data()
вернет указатель на пространство данных вектора.источник
error C2039: 'data' : is not a member of 'std::vector<_Ty>'
vector::data()
новичок в C ++ 11Вместо этого возьмите указатель на первый элемент:
источник