STARTING
CONTROL STATEMENT
FUNCTION
ARRAY & POINTER
OOP
STL
ITERATORS
OTHER FEATURES
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

[Iterator] Sử dụng trong List trong C++

Iterator là một khái niệm quan trọng và mạnh mẽ, đặc biệt là khi làm việc với các cấu trúc dữ liệu như List. Iterator cung cấp một cách tiếp cận linh hoạt để duyệt qua các phần tử trong một cấu trúc dữ liệu và thực hiện các thao tác khác nhau trên chúng. Trong bài viết này, mình sẽ tìm hiểu sâu hơn về việc sử dụng Iterator trong List trong ngôn ngữ lập trình C++.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Đầu tiên, mình sẽ tìm hiểu về định nghĩa và ý nghĩa của Iterator trong C++, cùng với vai trò quan trọng của nó trong List. Sau đó, sẽ đi vào các loại Iterator phổ biến được sử dụng trong List, bao gồm Bidirectional Iterator và Reverse Iterator.Tiếp theo, sẽ tìm hiểu cách sử dụng Iterator trong List, bao gồm cách duyệt qua các phần tử của List và thực hiện các thao tác thêm, xóa hoặc sửa đổi phần tử.

Cuối cùng, mình sẽ thực hiện một số ví dụ minh họa để hiểu rõ hơn về cách sử dụng Iterator trong List.

List trong Iterator bằng C++

List là một cấu trúc dữ liệu tuyến tính không liên tục, cho phép lưu trữ và quản lý một tập hợp các phần tử theo thứ tự. List trong C++ thường được triển khai dưới dạng danh sách liên kết kép (double linked list), trong đó mỗi phần tử được liên kết với các phần tử trước và sau nó.

Bài viết này được đăng tại [free tuts .net]

Ý nghĩa và vai trò của Iterator trong List

Iterator trong C++ là một công cụ mạnh mẽ cho phép truy cập và điều hướng qua các phần tử trong một cấu trúc dữ liệu như List. Với Iterator, mình có thể duyệt qua từng phần tử trong List một cách linh hoạt và tiện lợi, thực hiện các thao tác như thêm, xóa, hoặc sửa đổi phần tử một cách dễ dàng. Iterator cung cấp một giao diện chuẩn để làm việc với các cấu trúc dữ liệu, giúp tăng tính linh hoạt và tái sử dụng của mã lập trình.

Cú pháp khai báo iterator List trong C++

iterator 202 png

Cú pháp khai báo iterator cho một container như List như sau:

std::list<int>::iterator it; // Đối với iterator cho List
std::list<int>::reverse_iterator rit; // Đối với reverse iterator cho List

Trong đó:

  • std::list<int>::iterator là kiểu iterator cho List chứa các phần tử kiểu int.
  • std::list<int>::reverse_iterator là kiểu reverse iterator cho List chứa các phần tử kiểu int.

Bạn có thể thay đổi kiểu dữ liệu (ở đây là int) tùy thuộc vào loại dữ liệu của các phần tử trong List.

Tiếp theo, mình sẽ tìm hiểu sâu hơn về các loại Iterator và cách sử dụng chúng trong List.

Loại Iterator List trong C++

Bidirectional Iterator

  • Bidirectional Iterator là loại Iterator cho phép di chuyển qua lại giữa các phần tử của List cả theo hướng tiến (forward) và lùi (backward).

Ví dụ: Trong List, ta có thể sử dụng Bidirectional Iterator để duyệt qua các phần tử từ đầu đến cuối hoặc từ cuối đến đầu của List.

#include <iostream>
#include <list>

int main() {
    std::list<int> myList = {1, 2, 3, 4, 5};

    // Sử dụng Bidirectional Iterator để duyệt qua các phần tử từ đầu đến cuối
    std::cout << "Duyệt qua các phần tử từ đầu đến cuối:" << std::endl;
    for (auto it = myList.begin(); it != myList.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    // Sử dụng Bidirectional Iterator để duyệt qua các phần tử từ cuối về đầu
    std::cout << "Duyệt qua các phần tử từ cuối về đầu:" << std::endl;
    for (auto it = myList.rbegin(); it != myList.rend(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

Reverse Iterator

  • Reverse Iterator là loại Iterator cho phép duyệt qua các phần tử của List theo chiều ngược lại so với thứ tự ban đầu.

Ví dụ: Sử dụng Reverse Iterator, ta có thể duyệt qua các phần tử của List từ cuối về đầu.

#include <iostream>
#include <list>

int main() {
    std::list<int> myList = {1, 2, 3, 4, 5};

    // Sử dụng Reverse Iterator để duyệt qua các phần tử từ cuối về đầu
    std::cout << "Duyệt qua các phần tử từ cuối về đầu:" << std::endl;
    for (auto it = myList.rbegin(); it != myList.rend(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

Dưới đây là một ví dụ minh họa về cách sử dụng Bidirectional Iterator và Reverse Iterator trong List:

#include <iostream>
#include <list>

int main() {
    // Khai báo một List và thêm các phần tử vào
    std::list<int> myList = {1, 2, 3, 4, 5};

    // Sử dụng Bidirectional Iterator để duyệt từ đầu đến cuối
    std::cout << "Forward traversal using Bidirectional Iterator: ";
    for (auto it = myList.begin(); it != myList.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    // Sử dụng Reverse Iterator để duyệt từ cuối về đầu
    std::cout << "Reverse traversal using Reverse Iterator: ";
    for (auto it = myList.rbegin(); it != myList.rend(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

Trong ví dụ trên, mình sử dụng Bidirectional Iterator để duyệt từ đầu đến cuối của List và Reverse Iterator để duyệt từ cuối về đầu.

Cách sử dụng Iterator trong List bằng C++

Duyệt qua các phần tử của List bằng Iterator

  • Để duyệt qua các phần tử của List bằng Iterator, mình có thể sử dụng vòng lặp for hoặc while để lặp qua từng phần tử trong List bằng cách di chuyển Iterator từ phần tử đầu tiên đến phần tử cuối cùng.
#include <iostream>
#include <list>

int main() {
    std::list<int> myList = {1, 2, 3, 4, 5};

    // Duyệt qua các phần tử của List bằng Iterator
    std::cout << "Traversal using Iterator: ";
    for (auto it = myList.begin(); it != myList.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

Thực hiện các thao tác thêm, xóa, hoặc sửa đổi phần tử trong List bằng Iterator

  • Iterator trong List cung cấp khả năng thực hiện các thao tác như thêm, xóa, hoặc sửa đổi phần tử một cách linh hoạt. Chúng ta có thể sử dụng các hàm như insert(), erase(), hoặc splice() để thực hiện các thao tác này.
#include <iostream>
#include <list>

int main() {
    std::list<int> myList = {1, 2, 3, 4, 5};

    // Thêm một phần tử mới vào List bằng Iterator
    auto it = myList.begin();
    ++it; // Di chuyển Iterator đến vị trí thứ hai
    myList.insert(it, 10); // Thêm phần tử 10 vào vị trí thứ hai

    // Xóa một phần tử trong List bằng Iterator
    it = myList.begin();
    ++it; // Di chuyển Iterator đến vị trí thứ hai
    myList.erase(it); // Xóa phần tử ở vị trí thứ hai

    // Sửa đổi phần tử trong List bằng Iterator
    it = myList.begin();
    ++it; // Di chuyển Iterator đến vị trí thứ hai
    *it = 20; // Sửa giá trị của phần tử ở vị trí thứ hai thành 20

    // Duyệt qua các phần tử của List sau khi thực hiện các thao tác
    std::cout << "List after modifications: ";
    for (const auto& elem : myList) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

Trong ví dụ trên, mình thực hiện các thao tác thêm, xóa, và sửa đổi phần tử trong List bằng Iterator và sau đó duyệt lại List để kiểm tra kết quả.

Kết bài

Trong bài viết này,mình đã tìm hiểu về cách sử dụng Iterator trong List trong ngôn ngữ lập trình C++. Iterator là một công cụ mạnh mẽ cho việc duyệt qua các phần tử của container và thực hiện các thao tác thêm, xóa, hoặc sửa đổi phần tử một cách linh hoạt.

Mình đã tìm hiểu cách sử dụng Iterator để duyệt qua các phần tử của List bằng vòng lặp for và thực hiện các thao tác thêm, xóa, hoặc sửa đổi phần tử trong List bằng cách di chuyển Iterator và sử dụng các hàm như insert(), erase(), và splice().

Bằng cách sử dụng Iterator, có thể tận dụng sức mạnh của STL và thao tác linh hoạt với dữ liệu trong các container như List một cách dễ dàng và hiệu quả.

Cùng chuyên mục:

Các hàm xử lý mảng đa chiều (array.h) trong C/C++

Các hàm xử lý mảng đa chiều (array.h) trong C/C++

Các hàm xử lý ngày tháng (datetime.h) trong C/C++

Các hàm xử lý ngày tháng (datetime.h) trong C/C++

Các hàm xử lý số thực (float.h) trong C/C++

Các hàm xử lý số thực (float.h) trong C/C++

Các hàm xử lý số nguyên lớn (bigint.h) trong C/C++

Các hàm xử lý số nguyên lớn (bigint.h) trong C/C++

Các hàm xử lý thời gian (time.h) trong C

Các hàm xử lý thời gian (time.h) trong C

Các hàm xử lý chuỗi (string.h) trong C/C++

Các hàm xử lý chuỗi (string.h) trong C/C++

Thread Pools và Parallel Algorithms trong C++

Thread Pools và Parallel Algorithms trong C++

Tạo và quản lý các Multithreading trong C++

Tạo và quản lý các Multithreading trong C++

Xử lý ngoại lệ khi làm việc với Memory Allocation trong C++

Xử lý ngoại lệ khi làm việc với Memory Allocation trong C++

Try, Catch, và Throw của Exception Handling trong C++

Try, Catch, và Throw của Exception Handling trong C++

Cách sử dụng Lambda Expressions trong C++

Cách sử dụng Lambda Expressions trong C++

Sử dụng weak_ptr trong C++

Sử dụng weak_ptr trong C++

Sử dụng shared_ptr trong C++

Sử dụng shared_ptr trong C++

Sử dụng unique_ptr trong C++

Sử dụng unique_ptr trong C++

Tổng quan về Smart Pointers trong C++

Tổng quan về Smart Pointers trong C++

Sử dụng Iterators trong STL của C++

Sử dụng Iterators trong STL của C++

[Iterator] Sử dụng Vector trong C++

[Iterator] Sử dụng Vector trong C++

[STL] Sử dụng Vector trong C++

[STL] Sử dụng Vector trong C++

Tổng quan về Iterators trong C++

Tổng quan về Iterators trong C++

[STL] Các hàm thường dùng của lớp Vector trong C++

[STL] Các hàm thường dùng của lớp Vector trong C++

Top