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

[STL] Cách tìm kiếm và xóa phần tử của một container trong C++

Trước khi đi sâu vào cách tìm kiếm và xóa phần tử trong một container, mình cần hiểu về Thư viện Chuẩn Template (STL) trong ngôn ngữ lập trình C++ và tầm quan trọng của các hoạt động này trong lập trình. Trong bài viết này, mình sẽ tìm hiểu về cách sử dụng STL để tìm kiếm và xóa phần tử của một container trong 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.

STL trong C++

STL là một phần của thư viện chuẩn của C++, cung cấp một bộ các công cụ và cấu trúc dữ liệu để thực hiện các thao tác phổ biến và hiệu quả trong lập trình. STL chứa nhiều thành phần, bao gồm các container (như vector, list, set, map), các iterator, và các algorithm.

Tầm quan trọng của tìm kiếm và xóa phần tử trong lập trình

  • Tìm kiếm phần tử: Tìm kiếm phần tử trong một container là một hoạt động cần thiết trong nhiều tình huống lập trình. Ví dụ, khi bạn muốn kiểm tra xem một phần tử có tồn tại trong container hay không, hoặc khi bạn cần tìm một phần tử cụ thể trong container để thực hiện các thao tác xử lý dữ liệu khác.

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

  • Xóa phần tử: Xóa phần tử từ một container là một hoạt động quan trọng để cập nhật dữ liệu hoặc loại bỏ các phần tử không cần thiết. Việc xóa phần tử đòi hỏi hiểu biết sâu sắc về cấu trúc dữ liệu và cách quản lý bộ nhớ để tránh gây ra lỗi hoặc rủi ro trong chương trình.

Ví dụ:

Giả sử mình có một vector chứa các số nguyên và muốn tìm kiếm một số cụ thể trong vector và sau đó xóa nó khỏi vector nếu nó tồn tại. Dưới đây là một đoạn mã minh họa:

#include <iostream>
#include <vector>
#include <algorithm>

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

    // Tìm kiếm phần tử 3 trong vector
    auto it = std::find(numbers.begin(), numbers.end(), 3);

    // Nếu phần tử tồn tại, xóa nó khỏi vector
    if (it != numbers.end()) {
        numbers.erase(it);
    }
     //Bài viết được đăng tại freetuts.net
  
    // Hiển thị vector sau khi xóa phần tử
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

Trong ví dụ này, mình sử dụng hàm std::find() để tìm kiếm phần tử 3 trong vector. Nếu phần tử tồn tại, mình sử dụng hàm erase() để xóa nó khỏi vector.

Tìm kiếm phần tử trong một container trong C++

Sử dụng hàm find() trong STL

Hàm std::find() trong STL được sử dụng để tìm kiếm một phần tử cụ thể trong một container. Hàm này trả về iterator đến phần tử đầu tiên trong container mà có giá trị bằng với giá trị được chỉ định, hoặc trả về iterator end() nếu phần tử không được tìm thấy.

Ví dụ:

Dưới đây là một ví dụ minh họa về việc sử dụng hàm std::find() để tìm kiếm một phần tử trong một vector:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5};
    //Bài viết được đăng tại freetuts.net

    // Tìm kiếm phần tử 3 trong vector
    auto it = std::find(numbers.begin(), numbers.end(), 3);
   //Bài viết được đăng tại freetuts.net

    // Kiểm tra xem phần tử có tồn tại hay không
    if (it != numbers.end()) {
        std::cout << "Phan tu 3 duoc tim thay tai vi tri: " << std::distance(numbers.begin(), it) << std::endl;
    } else {
        std::cout << "Khong tim thay phan tu 3 trong vector." << std::endl;
    }

    return 0;
}

Kết quả:

Screenshot 202024 03 27 20001015 png

Sử dụng hàm find_if() trong STL với điều kiện tùy chỉnh

Hàm std::find_if() trong STL được sử dụng để tìm kiếm một phần tử trong một container dựa trên một điều kiện tùy chỉnh. Hàm này nhận vào một range (phạm vi) và một hàm điều kiện, và trả về iterator đến phần tử đầu tiên trong range mà thỏa mãn điều kiện, hoặc trả về iterator end() nếu không tìm thấy.

Ví dụ:

Dưới đây là một ví dụ minh họa về việc sử dụng hàm std::find_if() để tìm kiếm một phần tử thỏa mãn một điều kiện tùy chỉnh trong một vector:

#include <iostream>
#include <vector>
#include <algorithm>

// Hàm kiểm tra số có phải là số nguyên tố hay không
bool isPrime(int num) {
    if (num <= 1) return false;
    for (int i = 2; i * i <= num; ++i) {
        if (num % i == 0) return false;
    }
    return true;
}

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9};

    // Tìm kiếm phần tử đầu tiên trong vector là số nguyên tố
    auto it = std::find_if(numbers.begin(), numbers.end(), isPrime);

    // Kiểm tra xem phần tử có tồn tại hay không
    if (it != numbers.end()) {
        std::cout << "Phan tu dau tien la so nguyen to trong vector: " << *it << std::endl;
    } else {
        std::cout << "Khong tim thay so nguyen to trong vector." << std::endl;
    }
    //Bài viết được đăng tại freetuts.net

    return 0;
}

Kết quả:

Screenshot 202024 03 27 20003118 png

Xóa phần tử khỏi một container trong C++

Sử dụng hàm erase() trong STL

Hàm erase() trong STL được sử dụng để xóa một phần tử hoặc một dãy các phần tử từ container. Hàm này nhận vào một iterator hoặc một khoảng iterator để xác định phần tử hoặc dãy phần tử cần xóa và loại bỏ chúng khỏi container.

Ví dụ:

Dưới đây là một ví dụ minh họa về việc sử dụng hàm erase() để xóa một phần tử cụ thể từ một vector:

#include <iostream>
#include <vector>

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

    // Xóa phần tử có giá trị là 3 khỏi vector
    auto it = std::find(numbers.begin(), numbers.end(), 3);
    if (it != numbers.end()) {
        numbers.erase(it);
    }
    //Bài viết được đăng tại freetuts.net

    // Hiển thị vector sau khi xóa phần tử
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

Xóa các phần tử thỏa mãn điều kiện tùy chỉnh

Đôi khi, mình cần xóa tất cả các phần tử trong container thỏa mãn một điều kiện tùy chỉnh. Để thực hiện điều này, có thể sử dụng hàm remove_if() kết hợp với hàm erase().

Ví dụ:

Dưới đây là một ví dụ minh họa về việc sử dụng hàm remove_if()erase() để xóa tất cả các số lẻ khỏi một vector:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9};

    // Xóa tất cả các số lẻ từ vector
    numbers.erase(std::remove_if(numbers.begin(), numbers.end(), [](int num) { return num % 2 != 0; }), numbers.end());
    //Bài viết được đăng tại freetuts.net

    // Hiển thị vector sau khi xóa phần tử
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

Kết quả:

Screenshot 202024 03 27 20004106 png

Trong ví dụ này, mình sử dụng lambda expression để xác định điều kiện tùy chỉnh (số lẻ), và sau đó sử dụng remove_if() để di chuyển tất cả các phần tử thỏa mãn điều kiện này về phía cuối của vector. Cuối cùng, sử dụng erase() để loại bỏ tất cả các phần tử này khỏi vector.

Ví dụ thực hành tìm kiếm và xóa trong C++

Ví dụ về tìm kiếm phần tử trong một vector

Dưới đây là một ví dụ minh họa về việc sử dụng hàm std::find() để tìm kiếm một phần tử trong một vector:

#include <iostream>
#include <vector>
#include <algorithm>

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

    // Tìm kiếm phần tử 3 trong vector
    auto it = std::find(numbers.begin(), numbers.end(), 3);
    //Bài viết được đăng tại freetuts.net

    // Kiểm tra xem phần tử có tồn tại hay không
    if (it != numbers.end()) {
        std::cout << "Phan tu 3 duoc tim thay tai vi tri: " << std::distance(numbers.begin(), it) << std::endl;
    } else {
        std::cout << "Khong tim thay phan tu 3 trong vector." << std::endl;
    }

    return 0;
}

Ví dụ về xóa phần tử khỏi một list

Dưới đây là một ví dụ minh họa về việc sử dụng hàm std::list::remove() để xóa phần tử khỏi một list:

#include <iostream>
#include <list>

int main() {
    std::list<int> numbers = {1, 2, 3, 4, 5};
     //Bài viết được đăng tại freetuts.net

    // Xóa phần tử có giá trị là 3 khỏi list
    numbers.remove(3);

    // Hiển thị list sau khi xóa phần tử
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

Trong ví dụ này, mình sử dụng phương thức remove() của class std::list để xóa phần tử có giá trị là 3 khỏi list. Sau đó, hiển thị list sau khi xóa phần tử để kiểm tra kết quả.

Kết bài

Tìm kiếm và xóa phần tử là những hoạt động quan trọng và thường xuyên được sử dụng trong quá trình xử lý dữ liệu. Bằng cách sử dụng các hàm và phương thức từ STL, mình có thể thực hiện các tác vụ này một cách dễ dàng và hiệu quả trong ngôn ngữ lập trình C++. Hy vọng rằng sau khi đọc bài viết này, bạn sẽ có cái nhìn tổng quan về cách thực hiện tìm kiếm và xóa phần tử của một container trong C++.

Cùng chuyên mụ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++

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

[Iterator] Sử dụng trong List 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