Tôi đang cố gắng tìm hiểu C++ với một nền Java nhỏ và tôi đang cố viết mã trả về giao điểm của hai danh sách. Tôi tin rằng tôi có ý tưởng đúng về mặt khái niệm, nhưng tôi đang gặp rắc rối với cú pháp vì không có gì biên dịch.Người mới bắt đầu C++: Biến đổi chỉ mục-cú pháp thành cú pháp vòng lặp
Dưới đây là đoạn code tôi đã đưa ra:
#include <iostream>
using namespace std;
#include <list>
template <typename Object>
list<Object> intersection(const list<Object> & L1, const list<Object> & L2){
std::list<Object> result;
int pos1 = 0;
int pos2 = 0;
while (pos1 < L1.size() && pos2 < L2.size()) {
if (L1[pos1] > L1[pos2]) {
pos1++;
} else if (L2[pos2] > L1[pos1]) {
pos2++;
} else {
result.push_back(L2[pos2]);
pos1++;
pos2++;
}
}
return result;
}
Những điều tôi nghĩ rằng tôi cần: một iterator (tôi chắc chắn rằng con đường tôi đang truy cập vào danh sách là không đúng)
Tôi đã sửa đổi tiêu đề để làm cho nó (hy vọng) mô tả hơn và cho biết đây là vấn đề tương đối chung, thú vị cho người dùng trong tương lai. Tôi hy vọng điều này là ok (xin vui lòng trở lại nếu không). – jogojapan
Vì bạn là người mới bắt đầu tại C++, có thể đáng nói rằng bạn không nên sử dụng 'std :: list' ... mãi mãi. (Không phải vì có gì sai với lớp C++, nhưng vì nó là một cấu trúc dữ liệu khủng khiếp). Khi bạn chỉ cần một vùng chứa, mặc định là 'vector' thay thế. (Điều đó cũng sẽ cho phép mã của bạn hoạt động với các chỉ mục thay vì các trình lặp) –
jalf
Điểm tốt. 'vector' tốt hơn trong hầu hết các trường hợp, nhưng tôi nghĩ là tốt để biết các ưu điểm và nhược điểm của cả' list' và 'vectơ' và nếu bạn muốn viết mã C++ tốt tại một số điểm bạn cần biết về con trỏ/vòng lặp. – Ari