SORU
26 HAZİRAN 2011, Pazar


Std::ham veri, vektör işaretçi?

Sohbet std kullanmaya çalışıyorum::char dizisi olarak vektör.

Benim işlevi geçersiz bir işaretçi alır

void process_data(const void *data);

Ben sadece bu kodu kullanmadan önce:

char something[] = "my data here";
process_data(something);

Beklediğimiz gibi çıktı.

Onun yerine bu kodu kullanıyorum ama şimdi CYBH dynamicity ihtiyacım var::vektör,:

vector<char> something;
*cut*
process_data(something);

Soru, nasıl vektör ham veri (hangisi olursa olsun, yüzen ya da vb) ulaşabilmem benim işleve char vektör geçtim mi.

Bunu denedim:

process_data(&something);

Ve bu:

process_data(&something.begin());

Ama anlamsız veri işaretçisi döndü ve ikinci uyarı verdi: warning C4238: nonstandard extension used : class rvalue used as lvalue

CEVAP
26 HAZİRAN 2011, Pazar


&something veri adresi tutar seni std::vector nesnenin adresini verir. &something.begin() verir adresinin tarafından döndürülen yineleyici begin() (derleyici uyarıyor, bu teknik olarak değil izin çünkü something.begin() bir rvalue ifade, yani adresini cannot be taken).

Kabın içinde en az bir eleman vardır varsayarak, üzerinden alabilirsiniz kap, ilk elemanın adresini almak gerekir

  • &something[0] &something.front() (Dizin 0'daki öğe adresi), veya

  • &*something.begin() (elemanın adresi yineleyici begin() tarafından iade ile gösterilen).

std::vector eklendi 11 C: data(). Bu üye işlevi yalnızca &something.front() gibi kabında ilk elemanın adresini döndürür. Bu üye işlevi avantajı ise konteyner boş hatta arama için Tamam olmasıdır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CorridorDigital

    CorridorDigi

    17 Mayıs 2010
  • L33TNoonProductions

    L33TNoonProd

    24 EYLÜL 2010
  • Chaîne de TheMoustic

    Chaîne de T

    5 Kasım 2006