Việc triển khai std::vector
mà các phiên bản với Visual Studio 2010 và phiên bản cũ hơn có đặc trưng nổi tiếng: phương pháp resize
có chữ ký sau (tuân thủ C++ 03) :Tự thực hiện STL tương thích STL :: vector
void resize(size_type new_size, value_type value);
thay vì chữ ký C++ 11-compliant đó là được sử dụng bởi hầu hết các triển khai STL khác (như STL gcc hoặc STLport) rất lâu trước khi C++ 11:
void resize(size_type new_size, const value_type& value);
các vấn đề với biến thể đầu tiên là, trong một số situa tions, nó sẽ không biên dịch nếu value_type
có một đặc điểm kỹ thuật liên kết:
struct __declspec(align(64)) S { ... };
std::vector<S> v; // error C2719: '_Val': formal parameter with __declspec(align('64')) won't be aligned
Đây là vấn đề wellknown không có cách giải quyết thỏa đáng ngoài việc sử dụng một thực hiện khác nhau của std::vector
.
Tôi đang tìm kiếm một tốt bằng văn bản, được kiểm tra kỹ, khép kín và STL-tương thích thực hiện std::vector
với một giấy phép MIT kiểu rằng tôi có thể thả vào dự án của tôi như là một container của sự lựa chọn cho việc sắp xếp loại.
Tôi xem xét giải nén nó từ STLport hoặc gcc's STL nhưng, hoàn toàn tuân thủ tiêu chuẩn, chúng đều lớn với nhiều phụ thuộc không tầm thường.
(Tôi sẽ hoàn toàn hài lòng với một thực hiện một tập hợp con hợp lý std::vector
rằng sẽ chỉ hỗ trợ push_back
, clear
, capacity
, size
, reserve
, resize
, swap
và mảng lập chỉ mục.)
Bất kỳ ý tưởng?
Tôi không thấy phương thức '.resize()' làm cho khai báo 'std :: vector
v;' thành không thành công. Việc khởi tạo một mẫu lớp không khởi tạo các phương thức của nó, chỉ các phương thức được sử dụng. (Tức là ctor và dtor mặc định trong trường hợp này). – MSaltersTôi đoán lỗi được phát ra trong quá trình phân tích cú pháp ... Hãy nhớ rằng chúng ta đang nói về một vấn đề cụ thể về trình biên dịch ở đây. –