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

  • Bigapplemagic

    Bigapplemagi

    22 EYLÜL 2011
  • Creavite

    Creavite

    8 Mart 2009
  • Elly Awesome

    Elly Awesome

    15 ŞUBAT 2010