Próbuję użyć std::vector
jako char
tablicy.
Moja funkcja przyjmuje void pointer:
void process_data(const void *data);
Wcześniej po prostu użyłem tego kodu:
char something[] = "my data here";
process_data(something);
Który działał zgodnie z oczekiwaniami.
Ale teraz potrzebuję dynamiki std::vector
, więc zamiast tego wypróbowałem ten kod:
vector<char> something;
*cut*
process_data(something);
Pytanie brzmi, jak przekazać wektor char do mojej funkcji, aby uzyskać dostęp do surowych danych wektorowych (bez względu na to, jaki to format - elementy zmiennoprzecinkowe itp.)?
Próbowałem tego:
process_data(&something);
I to:
process_data(&something.begin());
Ale wrócił wskaźnik do danych bełkot, a ten ostatni dał ostrzeżenie: warning C4238: nonstandard extension used : class rvalue used as lvalue
.
vector<bool>
który jest wyjątkiem od tej odpowiedzi (i nie ma ciągłej pamięcibool
s).std::vector<bool>
ponieważstd::vector<bool>
wymaga użycia obiektu proxy, a tego proxy nie można niejawnie przekonwertować na plikbool*
. Aby obejść ten problem, jeśli potrzebujesz sekwencjibool
, najlepiej po prostu użyć plikustd::vector<char>
. @Motti.data()
- po prostu udam, że nie widziałem tego brzydkiego&*iterator
: Pdata()
transmisji? Jeśli rozmiar wektora nigdy nie zostanie zmieniony ani na większy, ani na mniejszy (za pośrednictwempush_back()
lub innych funkcji, w tymreserve
), czy gwarantuje się, że wskaźnik będzie żył tak długo, jak będzie żył wektor, wskazując właściwe miejsce?something.data()
zwróci wskaźnik do przestrzeni danych wektora.źródło
error C2039: 'data' : is not a member of 'std::vector<_Ty>'
vector::data()
jest nowy w C ++ 11Zamiast tego weź wskaźnik do pierwszego elementu:
źródło