Implementasi std::vector
yang disertakan dengan Visual Studio 2010 dan versi sebelumnya memiliki kekhasan yang terkenal: metode resize
memiliki tanda tangan berikut (sesuai dengan C++03):
void resize(size_type new_size, value_type value);
alih-alih tanda tangan yang sesuai dengan C++11 yang telah digunakan oleh sebagian besar implementasi STL lainnya (seperti STL atau STLport gcc) jauh sebelum C++11:
void resize(size_type new_size, const value_type& value);
Masalah dengan varian pertama adalah, dalam beberapa situasi, ia akan gagal dikompilasi jika value_type
memiliki spesifikasi penyelarasan:
struct __declspec(align(64)) S { ... };
std::vector<S> v; // error C2719: '_Val': formal parameter with __declspec(align('64')) won't be aligned
Ini adalah baik dikenal masalah tanpa solusi yang memuaskan selain menggunakan implementasi std::vector
yang berbeda .
Saya mencari implementasi std::vector
yang ditulis dengan baik, teruji dengan baik, mandiri dan kompatibel dengan STL dengan lisensi gaya MIT yang dapat saya masukkan ke dalam proyek saya sebagai wadah pilihan tipe selaras.
Saya mempertimbangkan untuk mengekstraknya dari STLport atau STL gcc tetapi, karena sepenuhnya memenuhi standar, keduanya besar dengan banyak ketergantungan yang tidak sepele.
(Saya akan sangat senang dengan penerapan subset wajar std::vector
yang hanya mendukung push_back
, clear
, capacity
, size
, reserve
, resize
, swap
dan pengindeksan array.)
Ada ide?
.resize()
menyebabkan deklarasistd::vector<S> v;
gagal. Membuat instance templat kelas tidak membuat instance metodenya, hanya metode yang digunakan. (Yaitu ctor dan dtor default dalam kasus ini). - person MSalters   schedule 23.02.2012