2009-09-19 30 views
69
khác

trong C++, tôi có hai list<T> đối tượng AB và tôi muốn để thêm tất cả các thành viên của B đến hết A. Tôi đã tìm kiếm một số nguồn khác nhau và không tìm thấy một giải pháp đơn giản (e.i. A.append(B);) và điều này làm tôi ngạc nhiên một chút.làm thế nào để thêm một đối tượng danh sách <T> để

Cách tốt nhất để làm điều này là gì?

Khi điều đó xảy ra, tôi không quan tâm đến B sau này (nó bị xóa trong dòng tiếp theo) vì vậy nếu có cách để tận dụng điều đó để làm tốt hơn, tôi cũng quan tâm đến điều đó.

Trả lời

144

Nếu bạn muốn thêm bản các hạng mục trong B, bạn có thể làm:

a.insert(a.end(), b.begin(), b.end()); 

Nếu bạn muốn mục di chuyển của B đến hết A (đổ B cùng một lúc), bạn có thể làm:

a.splice(a.end(), b); 

Trong trường hợp ghép nối của bạn sẽ tốt hơn, vì nó chỉ liên quan đến việc điều chỉnh một vài con trỏ trong danh sách được liên kết.

+7

+1. Quá đúng. Nếu nó có thể được dễ dàng và hiệu quả để "lát" bản đồ và bộ ... – paercebal

+0

Một trong hai hoạt động này là O (1)? –

+2

Tôi đoán mối nối phải là O (1) đối với trường hợp trên. – chunkyguy

0

một ví dụ sử dụng tăng

std::list<T> A; // object A is a list containing T structure 
std::list<T> B; // object B is a list containing T structure 

// append list B to list A 
BOOST_FOREACH(auto &listElement, B) { A.push_back(listElement); } 
Các vấn đề liên quan