Bộ lặp đầu vào
Bài học 14 trên 23 trong khóa học C++ - Thư viện mẫu chuẩn của Coddy.
Bộ lặp đầu vào là bộ lặp dùng để đọc các giá trị từ vùng chứa. Bộ lặp đầu vào có chức năng hạn chế nhất trong tất cả các bộ lặp. Tuy nhiên, nhờ vậy mà chúng đơn giản và dễ hiểu.
Chúng chủ yếu được dùng trong các thao tác đầu vào tuần tự, trong đó bộ lặp chỉ trỏ đến mỗi giá trị một lần rồi được tăng lên, thường là dùng toán tử ++ để tăng bộ lặp lên một vị trí.

Như bạn có thể thấy, bộ lặp tiến, bộ lặp hai chiều và bộ lặp truy cập ngẫu nhiên đều là các bộ lặp đầu vào hợp lệ.
Vậy, chúng ta sẽ tìm hiểu các đặc điểm của bộ lặp đầu vào.
- Toán tử bằng/không bằng
Bạn có thể so sánh bộ lặp đầu vào bằng toán tử bằng hoặc không bằng. Hai bộ lặp chỉ bằng nhau khi cả hai cùng trỏ đến một vị trí.
A == B // Bằng nhau
A != B // Không bằng nhauHãy xem ví dụ kiểm tra xem hai bộ lặp có trỏ đến cùng một vị trí hay không.
vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1, it2;
it1 = numbers.begin();
it2 = numbers.begin() + 1;
if(it1 == it2)
cout << "Both iterators are equal.";
else
cout << "Both iterators are not equal.";Output:
Both iterators are not equal.Trong ví dụ trên, chúng ta khai báo hai bộ lặp có tên it1 và it2 bằng vector<int>::iterator. Sau đó, chúng ta gán giá trị cho chúng. Bộ lặp it1 trỏ đến phần tử đầu tiên nhờ phương thức begin(). Bộ lặp it2 trỏ đến phần tử thứ hai vì chúng ta tăng giá trị của phương thức begin() lên một. Vì vậy, đầu ra của chương trình cho biết hai bộ lặp không trỏ đến cùng một vị trí.
- Giải tham chiếu
Bạn có thể giải tham chiếu một bộ lặp bằng toán tử*. Nếu in ra giá trị đã giải tham chiếu của bộ lặp, chúng ta sẽ nhận được giá trị thực tế của phần tử mà bộ lặp đang trỏ đến.
*A // Giải tham chiếu bằng *vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1, it2;
it1 = numbers.begin();
it2 = numbers.begin() + 1;
cout << *it1 << endl;
cout << *it2;Output:
1
2Trong ví dụ trên, tình huống hoàn toàn giống ví dụ đầu tiên. Bộ lặp it1 trỏ đến phần tử đầu tiên của vector, còn bộ lặp it2 trỏ đến phần tử thứ hai. Khi in ra các giá trị đã giải tham chiếu của bộ lặp, chúng ta nhận được giá trị thực tế của phần tử thứ nhất và thứ hai trong vector.
Vậy, nếu muốn in ra giá trị của biến hoặc phần tử mà bộ lặp đang trỏ đến, chúng ta dùng toán tử *.
- Có thể tăng
Bạn có thể tăng bộ lặp để nó tham chiếu đến phần tử tiếp theo trong dãy. Để làm vậy, chúng ta dùng toán tử++.
A++ // Toán tử tăng sau
++A // Toán tử tăng trướcvector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1;
it = numbers.begin();
cout << "First value is: " << *it << " ";
it++;
cout << "Second value is: " << *it << " ";
++it;
cout << "Third value is: " << *it;Output:
1 2 3Trong ví dụ trên, chúng ta khai báo một bộ lặp it để nó trỏ đến phần tử đầu tiên của vector. Chúng ta in ra phần tử đầu tiên của vector, sau đó tăng bộ lặp lên một để nó trỏ đến phần tử thứ hai, rồi tiếp tục như vậy.
- Có thể hoán đổi
Bạn có thể hoán đổi hai bộ lặp đang trỏ đến hai vị trí khác nhau. Chúng ta có thể làm vậy bằng một biến tạm như dưới đây.
vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1, it2, temp;
it1 = numbers.begin();
it2 = numbers.begin() + 1;
cout << *it1 << " " << *it2 << endl;
temp = it1;
it1 = it2;
it2 = temp;
cout << *it1 << " " << *it2 << endl;Output:
1 2
2 1Trong ví dụ trên, chúng ta khai báo hai bộ lặp rồi gán vị trí của phần tử đầu tiên cho bộ lặp thứ nhất và vị trí của phần tử thứ hai cho bộ lặp thứ hai. Chúng ta in ra hai phần tử rồi hoán đổi các giá trị của hai bộ lặp. Kết quả là bộ lặp thứ nhất trỏ đến phần tử thứ hai, còn bộ lặp thứ hai trỏ đến phần tử thứ nhất, như bạn có thể thấy trong đầu ra.
Thử thách
Trung bìnhVới 5 số từ đầu vào, hãy dùng một vector để lưu các giá trị. Sau đó dùng một iterator với phương thức begin() và duyệt qua vector, tăng iterator ở mỗi lần lặp.
Input
10
20
30
40
50Output
10 20 30 40 50Tự làm thử
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> numbers;
vector<int>::iterator it;
// Enter your code here
for(it = ; it != numbers.end(); )
{
}
return 0;
}Tất cả bài học trong C++ - Thư viện mẫu chuẩn
Tự luyện tập: Trình biên dịch C++ online