Menu
CoddyTech

Bộ lặp đầu ra

Bài học 15 trên 23 trong khóa học C++ - Thư viện mẫu chuẩn của Coddy.

Bộ lặp đầu ra là bộ lặp dùng để sửa đổi giá trị trong vùng chứa. Bộ lặp này hoàn toàn trái ngược với bộ lặp đầu vào và thực hiện chức năng đối lập. Bộ lặp đầu ra dùng để gán giá trị trong một dãy, nhưng không thể dùng để truy cập các giá trị đó. 

Như bạn 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 ra hợp lệ.


Vậy, chúng ta sẽ tìm hiểu các đặc điểm của bộ lặp đầu ra.


  • Toán tử bằng/không bằng
    Không giống như bộ lặp đầu vào, các bộ lặp đầu ra không thể được so sánh với nhau để kiểm tra tính bằng nhau. Vì vậy, nếu so sánh chúng bằng toán tử == và !=, chương trình sẽ báo lỗi.
A == B // Sai
A != B // Sai

  • Giải tham chiếu
    Ta dùng phép giải tham chiếu với bộ lặp đầu vào để truy cập giá trị của phần tử mà bộ lặp đang trỏ đến. Với bộ lặp đầu ra, ta dùng toán tử * để giải tham chiếu bộ lặp, nhờ đó có thể gán giá trị cho phần tử mà bộ lặp đang trỏ đến.
*A = 10 // Giải tham chiếu bằng *
vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it;

for(it=numbers.begin(); it != numbers.end(); it++)
	*it = 10;

for(it = numbers.begin(); it != numbers.end(); it++)
	cout << *it << " ";
Output:
10 10 10 10 10

 Trong ví dụ trên, ta lặp qua vector và dùng bộ lặp đầu ra để gán giá trị 10 cho từng phần tử.


  • Có thể tăng
    Có thể tăng bộ lặp đầu ra để nó trỏ đến phần tử tiếp theo trong dãy sau khi tăng. Ta dùng toán tử ++ để thực hiện việc này.
A++ // Toán tử tăng sau
++A // Toán tử tăng trước

  • Có thể hoán đổi
    Có thể hoán đổi hai bộ lặp đang trỏ đến hai vị trí khác nhau.

Hạn chế của bộ lặp đầu ra là bạn có thể dùng nó để gán giá trị cho phần tử mà bộ lặp đang trỏ đến, nhưng không thể truy cập giá trị đó để, chẳng hạn, lưu giá trị của phần tử vào một biến khác.

*A = x; // Hợp lệ
x = *A; // Không hợp lệ
challenge icon

Thử thách

Trung bình

Cho một số N từ đầu vào, biểu thị số phần tử trong vector. Trong N dòng tiếp theo, bạn sẽ nhận được mỗi dòng một số. Lưu tất cả các số vào vector. Sau đó, dùng một iterator đầu ra để gán cho mỗi phần tử giá trị bằng giá trị hiện tại cộng thêm một, rồi in ra các phần tử đã sửa đổi.

 

Input
5
10
20
30
40
50
Output
11 21 31 41 51

Tự 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(); )
    {

    }

    for(it = ; ; )
    {
        cout << /* Enter here */ << " ";
    }

    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