Tôi có std::vector
với các yếu tố n
. Bây giờ tôi cần chuyển một con trỏ tới một vectơ có các phần tử n-1
cuối cùng cho một hàm. Ví dụ: vector<int> foo
chứa (5,2,6,87,251)
. Một hàm lấy vector<int>*
và tôi muốn chuyển nó tới một con trỏ tới (2,6,87,251)
.Chuyển đổi trình vòng lặp thành con trỏ?
Tôi có thể chỉ (an toàn) lấy trình vòng lặp ++foo.begin()
, chuyển đổi nó thành con trỏ và chuyển nó tới hàm này không? Hoặc sử dụng &foo[1]
?
CẬP NHẬT: Mọi người đề nghị tôi thay đổi chức năng của mình để dùng trình lặp thay vì con trỏ. Điều đó dường như không thể xảy ra trong tình huống của tôi, vì hàm tôi đã đề cập là hàm find
của unordered_set<std::vector*>
. Vì vậy, trong trường hợp đó, đang sao chép các phần tử n-1
từ foo
vào một vectơ mới và gọi số find
bằng con trỏ đến tùy chọn duy nhất đó? Rất không hiệu quả! Nó giống như Shlemiel họa sĩ, đặc biệt là kể từ khi tôi phải truy vấn nhiều tập con: cuối cùng n-1
, sau đó n-2
, v.v ... và xem chúng có nằm trong unordered_set
hay không.
Bạn có thể giải thích thêm một chút về những gì bạn đang thực sự cố gắng làm không? Tôi hơi bối rối - có vẻ như bạn đang cố gắng làm điều gì đó với unordered_set <> và unordered_set <> :: find() rằng chúng không thực sự được thiết kế để làm (nhưng tôi hoàn toàn có thể không hiểu) . –
Tại sao bạn sử dụng một vectơ để đại diện cho một tập hợp không có thứ tự ở vị trí đầu tiên? Nếu bạn đang thực hiện nhiều truy vấn thành viên, có nhiều triển khai hiệu quả hơn nhiều. Bạn có thể muốn tạo một bộ và sau đó truy vấn đối với nó. – Uri
Tôi có một bộ S được biết đến trình tự. Đối với mỗi chuỗi mới, tôi phải tìm ra nhanh nếu nó ở trong S hay không. Tôi nhận ra rằng lưu trữ các trình tự đã biết như các vectơ riêng biệt và lưu trữ các con trỏ tới chúng trong unordered_set là một bộ nhớ lãng phí, và một trie sẽ tốt hơn. Nhưng tôi muốn tra cứu liên tục. – Frank