Problem

2/8

Trình lặp trong vectơ

Theory Click to read/hide

Trình lặp
Một cách để lặp lại các phần tử trong bộ chứa (cấu trúc dữ liệu) là iterator (iterator ), có nhiều loại.
 
Iterator - cấu trúc dữ liệu « biểu thị» ; trên một số phần tử vùng chứa và (đối với một số vùng chứa) có thể điều hướng đến phần tử trước đó/tiếp theo.

Vectơ sử dụng - trình lặp truy cập ngẫu nhiên(Trình lặp truy cập ngẫu nhiên) mạnh mẽ nhất.  Trình lặp truy cập ngẫu nhiên có thể truy cập một phần tử tùy ý của vectơ ngoài chuyển động tuần tự.

Lợi ích của Iterator
1)  Khi xóa phần tử và lặp qua phần tử bằng chỉ số ([]), chúng ta cần luôn theo dõi số lượng phần tử còn lại để không vượt quá vectơ và sử dụng trình vòng lặp, bạn có thể sử dụng end() để chỉ điểm cuối của vectơ.
2) Sử dụng một trình vòng lặp, bạn có thể dễ dàng tự động loại bỏ và chèn các phần tử vào một vectơ. 
 
Khai báo iterator
1) Khai báo một trình vòng lặp cho một vectơ số nguyên và trỏ nó tới phần tử đầu tiên trong vectơ. vectơ <int> myvector = { 1, 2, 3, 4, 5 }; vectơ <int>::iterator it = myvector.begin();
2) Khai báo một trình vòng lặp cho một vectơ số nguyên và trỏ nó tới phần tử sau cuối trong vectơ. vectơ <int> myvector = { 1, 2, 3, 4, 5 }; vectơ <int>::iterator it = myvector.end(); // trỏ đến phần tử sau phần tử cuối cùng, vectơ <int>::iterator it1 = myvector.end() - 1 ; // trỏ đến phần tử cuối cùng.  
Nhận và hiển thị giá trị
Nhận và hiển thị phần tử được chỉ ra bởi iterator. cout << *nó;  
Di chuyển vị trí trình vòng lặp
Di chuyển vị trí lặp 3 vị trí về phía trước. trước(nó, 3);  
Tạo một trình vòng lặp mới từ một trình vòng lặp hiện có
Tạo một trình vòng lặp mới dựa trên một trình vòng lặp hiện có, tăng 3 vị trí. auto it1 = next(nó, 3);  
Hiển thị giá trị véc-tơ bằng trình vòng lặp
vector<int>::iterator it; for (it = myvector.begin(); it != myvector.end(); ++it) {   cout<<*nó<<" ";  }
Vectơ duyệt
Để duyệt vectơ từ phần tử cuối cùng đến phần tử đầu tiên, một trình vòng lặp ngược reverse_iterator được sử dụng, nó được lấy bằng cách:
1) rbegin() -  trả về một trình lặp ngược trỏ đến phần tử cuối cùng của vectơ, ứng dụng của thao tác ++ dẫn đến chuyển đổi sang phần tử trước đó;
2) rend() -  trả về một trình vòng lặp ngược trỏ đến phần tử trước đó của vectơ, việc áp dụng thao tác ++ dẫn đến quá trình chuyển đổi  tiếp theo. vector<int>::reverse_iterator it = myvector.rbegin();  // trỏ đến phần tử cuối cùng vector<int>::reverse_iterator it = myvector.rend();    // trỏ đến một phần tử,   // cái nào đến trước cái đầu tiên,

Problem

Bạn được cung cấp một dãy số nguyên.  Viết chương trình đảo ngược một vectơ sử dụng reverse_iterator.

Đầu vào
Số cho trước N - số phần tử trong dãy (1<= N <= 100). Sau đó, các số N được viết cách nhau bằng dấu cách.
 
Đầu ra
Xuất tất cả các phần tử của vectơ kết quả trên một dòng, phân tách chúng bằng khoảng trắng.
 
Ví dụ
<đầu>
# Đầu vào Đầu ra
1 5
1 2 3 4 5
5 4 3 2 1
1
#include <iostream>            
2
#include <vector>            
3
using namespace std;            
4
int main()            
5
{            
6
    int n;            
7
    vector<int> myvector;                
8
    cin >> n;            
9
    for(int i=0;i<n;i++)            
10
    {            
11
        int a;            
12
        cin >> a;            
13
        myvector.push_back(a);            
14
    }            
15
    vector<int>::reverse_iterator it;            
16
17
    {            
18
        cout << *it << " ";            
19
    }            
20
 }            

     

Program check result

To check the solution of the problem, you need to register or log in!