Sự khác nhau giữa boost::container::vector và std::vector là gì?Sự khác nhau giữa tăng :: container :: vector và std :: vector
Trả lời
Trường hợp bạn có thể cần phiên bản tăng thay vì phiên bản tiêu chuẩn là khi bạn gặp chuyên môn <bool>
.
std::vector<bool>
được triển khai dưới dạng bitet, nó không lưu trữ phần tử của nó dưới dạng mảng bool
.
Điều này có nghĩa ví dụ đoạn mã sau sẽ không làm việc:
template<T>
void handleElement(T &element);
// suppose we get a bool vector:
std::vector<bool> v = ....;
// then this fails because v[i] is a proxy object
handleElement(v[0]);
boost::container::vector<bool>
không có chuyên môn như vậy.
Có một số sự khác biệt mà tôi có thể biên dịch:
° Không có chuyên môn của boost::container::vector<bool>
(nguồn @roeland)
decltype(std::vector<bool>(10)[0]) == std::_Bit_reference
decltype(boost::container::vector<bool>(10)[0]) == bool&
° Sử dụng cơ sở hạ tầng Boost cấp phát, trong đó (đặc biệt là trong C++ 1x) được linh hoạt hơn mà trình phân bổ tiêu chuẩn, không bỏ qua các đặc điểm nhất định được cung cấp bởi người cấp phát. (Nguồn: http://www.boost.org/doc/libs/1_59_0/doc/html/interprocess/allocators_containers.html#interprocess.allocators_containers.containers_explained.stl_container_requirements)
std::vector<double>::allocator_type == std::allocator<double>
boost::container::vector<double>::alloctor_type == boost::container::new_allocator<double>
Đặc biệt, chúng ta vẫn có thể xác định reference
và pointer
loại là khác nhau từ T&
và T*
(xem Is it still possible to customize STL vector's "reference" type?)
° Hỗ trợ cho container đệ quy (nguồn: Các Boost C++ Thư viện của Boris Schäling).
Triển khai STL cũ (cũ?) Không hỗ trợ các loại giá trị không đầy đủ (chúng không bắt buộc ở vị trí đầu tiên), đặc biệt trong các vùng chứa đệ quy.
using boost::container::vector;
struct animal{
vector<animal> children; // may not work with std::vector
};
int main(){
animal parent;
animal child1;
animal child2;
parent.children.push_back(child1);
parent.children.push_back(child2);
}
° std::vector
là đặc điểm kỹ thuật không phải là triển khai. Chỉ có một triển khai thực hiện boost::container::vector
trên tất cả các nền tảng, do đó có thể tạo nhiều giả định hơn (ví dụ: ban đầu std::vector
không cần sử dụng bộ nhớ liền kề) (nguồn: Thư viện Boost C++ của Boris Schäling).
- 1. Sự khác nhau giữa std :: set và std :: vector là gì?
- 2. Sự khác nhau giữa vector và đỉnh là gì?
- 3. Sự khác nhau giữa std :: cuối (MyVector) và myVector.end()
- 4. Eigen và std :: vector
- 5. Bounds kiểm tra std :: vector (và các container khác) trong clang?
- 6. std :: vector :: emplace_back và std :: di chuyển
- 7. Container với std :: vector và std :: thiết lập các thuộc tính?
- 8. std :: vector và std :: hành vi phút
- 9. std :: phân bổ vector và bộ nhớ
- 10. Lặp Nhiều std :: vector
- 11. Tại sao hành vi initializer_list của C++ cho std :: vector và std :: array khác nhau?
- 12. Làm thế nào để sắp xếp một std :: vector bởi các giá trị của một std :: vector khác nhau?
- 13. Sự khác nhau giữa std :: function và std :: mem_fn
- 14. Sự khác nhau chính giữa vector và ngăn xếp là gì?
- 15. std :: di chuyển giữa std :: string và std :: vector <unsigned char>
- 16. posix_memalign cho std :: vector
- 17. Chuyển đổi std :: mảng thành std :: vector
- 18. std :: vector iterator invalidation
- 19. Là std :: vector hoặc boost :: vector thread safe?
- 20. std :: vector insert() reallocation
- 21. Thay thế 'std :: vector` với `std :: array`
- 22. Sự khác biệt về std :: vector push_back (Object()) và push_back (new Object())?
- 23. sizeof() std :: vector (C++)
- 24. vector của std :: Các luồng
- 25. Khởi tạo ma trận tăng với std :: vector hoặc array
- 26. sự khác nhau giữa container servlet và container xuân là gì?
- 27. std :: vector constructor lấy cặp vòng lặp
- 28. std :: sao chép và std :: vector vấn đề
- 29. std :: list vs std :: vector iteration
- 30. Sự khác nhau giữa tăng :: string_ref và đẩy mạnh :: string_view
Tôi tìm thấy một câu hỏi có liên quan mà có lẽ câu trả lời này là tốt: http://stackoverflow.com/questions/22584685/difference-between-stdset-and-boostcontainerset – jfritz42
IIRC, Boost.Container tương thích với Boost. Di chuyển, có nghĩa là các vùng chứa của nó hỗ trợ các ngữ nghĩa di chuyển mà không có C++ 11. – chris
@ jfritz42 đã đồng ý, nơi nhận xét của tôi phù hợp hơn với bạn vì bạn đang sử dụng vectơ – sehe