2013-11-01 22 views
5

vector (cũng như list và các vùng chứa khác) có chức năng thành viên (MF) assign. Tôi muốn so sánh assign MF (phiên bản dải ô) so với toán tử gán.STL - toán tử gán với hàm thành viên `assign`

Theo như tôi hiểu nó là hữu ích để sử dụng assign khi:

  1. Một muốn gán một tiểu phạm vi của vector (không phải từ đầu đến cuối).
  2. Bài tập được thực hiện từ một mảng.

Trong các trường hợp khác không có sự chống đối với assign MF và toán tử gán có thể được sử dụng. Tôi có đúng không? Có một số lý do khác để sử dụng assign MF không?

+2

Một * pro * khác để gán là toán tử chuyển nhượng. Nếu bạn chỉ định một giá trị, nó sẽ được chuyển từ thay vì sao chép từ. – jrok

+1

Một con nhỏ của 'gán' là nó ít trực quan hơn với người khác đọc mã của bạn hơn là chỉ một dấu bằng, nhưng đó là một vấn đề nhỏ. –

Trả lời

7

Lý do chính để sử dụng assign là sao chép dữ liệu từ một loại vùng chứa này sang vùng chứa khác.

Ví dụ: nếu bạn muốn di chuyển nội dung của std::set<int> sang std::vector<int>, bạn không thể sử dụng toán tử gán, nhưng bạn có thể sử dụng vector.assign(set.begin(), set.end()).

Ví dụ khác sẽ sao chép nội dung của hai thùng chứa các loại khác nhau có thể chuyển đổi thành một hoặc loại khác; Nếu bạn cố gắng chỉ định std::vector<Derived*> cho một std::vector<Base*>, toán tử gán không đủ.

+0

Bạn vẫn có thể thực hiện 'vector = std :: vector (set.begin(), set.end())' vv, vì vậy 'assign' là hoàn toàn dư thừa. – emlai

+0

@emlai 'assign' rất hữu ích nếu bạn muốn sử dụng lại dung lượng thay vì phân bổ một véc tơ hoàn toàn mới. – TemplateRex

Các vấn đề liên quan