2011-11-01 36 views
21

Nếu tôi có vectơ các đối tượng trong một lớp mà tôi muốn thay đổi trong một lớp khác, tôi sẽ thử và chuyển tất cả thông tin theo tham chiếu.Truyền vectơ theo tham chiếu

Chính xác thì tôi cần phải làm gì để tham khảo? Các vector? Các vật thể? Cả hai?

Về cơ bản những gì tôi hỏi là: Sự khác biệt giữa những điều này là gì?

vector&<object> blah; // A reference to a vector of objects? 

vector<object&> blah; // A vector of references to objects? 

vector&<object&> blah; // A reference to a vector of references to objects??? 

Tôi không thực sự chắc chắn cách tham chiếu của mảng như vùng chứa hoạt động. Những điều này có hợp pháp không?

+0

Bạn cần thay đổi chính xác điều gì? Nếu bạn cần thay đổi một đối tượng, bạn chuyển nó qua tham chiếu. Nếu bạn cần thay đổi vùng chứa (ví dụ: thêm hoặc xóa đối tượng), bạn chuyển vùng chứa. – Vlad

+0

Và tham chiếu được viết chính xác là 'vector & blah;' – Vlad

+3

Tôi sẽ đề xuất [sách giới thiệu C++ tốt] (http://stackoverflow.com/q/388242/46642). –

Trả lời

41

vector&<object> là lỗi cú pháp. vector<object&> không hợp lệ, vì loại giá trị của vectơ phải được gán. vector&<object&> blah là lỗi cú pháp.

Tham chiếu đến vectơ là vector<T>&.

+0

ok vì vậy bạn chỉ cần lưu trữ một tham chiếu đến một vectơ ... và khi truy cập một phần tử của vectơ đã nói theo chỉ mục, bạn thực sự đang truy cập đối tượng gốc? – SirYakalot

4

Bạn không thể có vectơ tham chiếu. Các phần tử vectơ phải có thể sao chép và gán được, các tham chiếu nào thì không. Vì vậy, chỉ có tùy chọn đầu tiên thực sự là một tùy chọn, nhưng nó được viết là std::vector<Object> &.

Lưu ý rằng v[1] đã trả về một tham chiếu thành phần tử thứ hai, vì vậy bạn có thể vui vẻ chuyển từng phần tử theo tham chiếu.

Có thể có một véc-tơ của trình bao bọc tham chiếu a la std::ref, nhưng nếu bạn không biết đó là gì, có thể bạn không nên sử dụng nó vào thời điểm này.

2

Một tùy chọn khác là chuyển khoảng iterators thay vì vùng chứa. Đây là cách tiếp cận standard library mất trong <algorithm>. Chúng hơi chi tiết hơn ở trang gọi điện, nhưng chúng có lợi thế là chúng hoạt động đối với các bộ phận của bộ sưu tập cũng như các bộ sưu tập hoàn chỉnh và tách riêng thuật toán khỏi vùng chứa.

Cuối cùng, tất nhiên, nó có giá trị trong khi kiểm tra bạn biết số algorithms của bạn vì có thể đã có một cái mà bạn muốn.

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