C++遍歷vector實踐

一、 vector遍歷

vector是C++語言中常用的一種容器,由於其具有快速隨機訪問的特性以及高效地在尾部進行添加和刪除元素操作的能力,使得在實際業務開發中被廣泛使用。下面給出一個簡單的vector的遍歷實例:

#include <iostream>
#include <vector>

int main(){
    std::vector vec = {1, 2, 3, 4, 5};
    for (auto& element : vec){
        std::cout << element << " ";
    }
    return 0;
}

在上述代碼中,我們使用了一個基於範圍的for循環語句來遍歷vector中的所有元素,語法格式如下:

for (auto& element : vec){
    // 待執行的語句
}

其中,auto關鍵字會自動根據迭代器中元素的數據類型來推導element的數據類型,&符號表示以引用的方式進行遍歷,以確保不會發生元素值或者指針地址的複製,提高效率。

二、遍歷vector中的元素

在vector中可以存儲任意數據類型的元素,如基本數據類型、自定義數據類型,甚至可以存儲其他容器類型的元素,那麼我們如何對存儲在vector中的元素進行遍歷呢?下面以存儲自定義數據類型的vector為例進行講解:

#include <iostream>
#include <vector>
#include <string>

class Person{
public:
    std::string name;
    int age;
    
    Person(std::string n, int a): name(n), age(a){}
};

int main(){
    std::vector<Person> vec;  // 定義存儲Person類型元素的vector對象
    vec.push_back(Person("Tom", 20));
    vec.push_back(Person("Jack", 25));
    vec.push_back(Person("Lucy", 22));
    for (const auto& element : vec){
        std::cout << element.name << ", age:" << element.age << std::endl;
    }
    return 0;
}

在上述代碼中,我們通過定義一個自定義的Person類,來存儲vector中的元素,然後通過for循環進行遍歷,每次訪問元素時通過類中的成員變數名稱進行訪問。

三、C++便利vector

C++ STL庫中提供了一些常用的容器訪問演算法,用於方便地對容器中的元素進行遍歷、查找、排序等操作。下面給出一些常用的vector訪問演算法:

1、std::for_each:在每個容器元素上執行特定的操作

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

int main(){
    std::vector<int> vec = {1, 2, 3, 4, 5};
    // 對所有元素進行加3操作
    std::for_each(vec.begin(), vec.end(), [](int& n){ n += 3; });
    for (const auto& element : vec){
        std::cout << element << " ";
    }
    return 0;
}

2、std::find:在容器中查找指定元素

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

int main(){
    std::vector<int> vec = {1, 2, 3, 4, 5};
    // 在vector中查找元素3
    auto it = std::find(vec.begin(), vec.end(), 3);
    if (it != vec.end()){
        std::cout << "查找到元素,位置為:" << std::distance(vec.begin(), it) << std::endl;
    }
    else{
        std::cout << "未找到元素" << std::endl;
    }
    return 0;
}

3、std::sort:對容器中的元素進行排序

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

int main(){
    std::vector<int> vec = {15, 20, 5, 35, 10};
    // 對vector中元素進行升序排序
    std::sort(vec.begin(), vec.end());
    for (const auto& element : vec){
        std::cout << element << " ";
    }
    return 0;
}

四、C++遍歷map

與vector類似,C++內置容器std::map也是常被使用的一種容器類型,其以對的形式進行存儲,那麼如何遍歷map中的元素呢?下面給出一個簡單的遍歷map實例:

#include <iostream>
#include <map>
#include <string>

int main(){
    std::map<std::string, int> mapData = {
        {"Tom", 20},
        {"Jack", 25},
        {"Lucy", 22}
    };
    for (const auto& element : mapData){
        std::cout << element.first << ": " << element.second << std::endl;
    }
    return 0;
}

在上述代碼中,我們使用了基於範圍的for循環語句來遍歷map中的所有元素,map中的每個元素是以對的形式存儲的,因此通過訪問pair類型中的成員變數first和second來獲取對應元素的鍵和值。

五、C++遍歷文件夾

在實際業務開發中,我們常常需要遍歷某個目錄下的所有文件,C++語言提供了一種遍歷目錄的方法,可以方便地獲取指定目錄下的所有文件和子目錄列表,下面給出一個基本的遍歷目錄實例:

#include <iostream>
#include <filesystem>

int main(){
    std::string dirname = "C:\\data\\";  // 目錄路徑名
    for (const auto& entry : std::filesystem::directory_iterator(dirname)){
        std::cout << entry.path() << std::endl;
    }
    return 0;
}

在上述代碼中,我們使用了C++17中提供的std::filesystem標準庫,定義一個指定目錄名稱的字元串dirname,然後使用基於範圍的for循環語句來遍歷該目錄下的所有文件和子目錄,其中路徑信息存儲在std::filesystem::directory_entry對象中,可以通過調用其path()方法來獲取文件或目錄的完整路徑。

六、C++遍歷像素點

C++語言提供了處理圖像的庫,如OpenCV,常用於數字圖像處理、計算機視覺等領域。在對圖像進行處理的過程中,需要遍歷圖像中的每個像素,以便對其進行操作,下面給出一個簡單的遍歷像素點實例:

#include <iostream>
#include <opencv2/opencv.hpp>

int main(){
    // 讀取圖像
    cv::Mat image = cv::imread("lena.jpg");
    // 遍歷圖像中的每個像素
    for (int i = 0; i < image.rows; i++){
        for (int j = 0; j < image.cols; j++){
            cv::Vec3b pixel = image.at<cv::Vec3b>(i, j);  // 讀取像素值
            pixel[0] = pixel[0] * 0.5;  // 對藍色通道進行操作
            pixel[1] = pixel[1] * 0.5;  // 對綠色通道進行操作
            image.at<cv::Vec3b>(i, j) = pixel;  // 更新像素值
        }
    }
    // 展示修改後的圖像
    cv::imshow("lena", image);
    cv::waitKey(0);
    return 0;
}

在上述代碼中,我們使用了OpenCV庫中的cv::Mat類來讀取圖像,然後使用雙重for循環語句遍歷圖像中的每個像素,通過調用at()函數讀取指定像素的值,並對其進行操作,最後再次調用at()函數來更新對應像素的值。

七、C++遍曆數組

數組是C++語言中基本的數據結構之一,其在內存中是連續的一段數據空間,可以通過指針方式遍歷其元素,下面給出一個簡單的數組遍歷實例:

#include <iostream>

int main(){
    int arr[] = {1, 2, 3, 4, 5};
    int n = sizeof(arr) / sizeof(int);
    // 遍曆數組中所有元素
    for (int i = 0; i < n; i++){
        std::cout << arr[i] << " ";
    }
    return 0;
}

在上述代碼中,我們定義一個整型數組arr,使用for循環語句遍歷該數組中的所有元素,可以使用sizeof()函數計算出數組的長度。

八、C++遍歷excel

在實際業務開發中,我們常常需要對Excel表格進行操作,C++語言提供了一些第三方庫來訪問和處理Excel表格,如LibXL、ExcelFormat等,下面給出一個遍歷Excel表格中數據的實例:

#include <iostream>
#include <libxl.h>

int main(){
    libxl::Book* book = xlCreateBook();
    if (book){
        if (book->load("data.xlsx")){
            libxl::Sheet* sheet = book->getSheet(0);
            if (sheet){
                // 獲取表格行數和列數
                int rows = sheet->lastRow();
                int cols = sheet->lastCol();
                // 遍歷表格中所有數據
                for (int i = 0; i < rows; i++){
                    for (int j = 0; j < cols; j++){
                        libxl::CellType type = sheet->cellType(i, j);
                        if (type == libxl::CELLTYPE_NUMBER){  // 數字類型
                            double value = sheet->readNum(i, j);
                            std::cout << value << " ";
                        }
                        else if (type == libxl::CELLTYPE_STRING){  // 字元串類型
                            std::string value = sheet->readStr(i, j);
                            std::cout << value << " ";
                        }
                    }
                    std::cout << std::endl;
                }
            }
        }
        book->release();
    }
    return 0;
}

在上述代碼中,我們使用第三方庫LibXL來訪問指定路徑下的Excel表格文件,在LibXL庫中,通過xlCreateBook()函數創建一個新的工作簿,然後使用load()函數從指定文件中讀取數據,再通過getSheet()函數獲取Excel表格中的第一個工作表sheet,最後使用雙重for循環語句遍歷表格中所有數據。

九、C++遍歷中文字元

在C++語言中,由於其默認使用的編碼方式是ASCII碼,如果需要

原創文章,作者:PICMT,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/332452.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
PICMT的頭像PICMT
上一篇 2025-01-24 18:46
下一篇 2025-01-24 18:46

相關推薦

  • Python遍歷集合中的元素

    本文將從多個方面詳細闡述Python遍歷集合中的元素方法。 一、for循環遍歷集合 Python中,使用for循環可以遍歷集合中的每個元素,代碼如下: my_set = {1, 2…

    編程 2025-04-29
  • Python如何遍歷字典中的key和value

    本文將詳細講解Python中如何遍歷字典中的key和value,包括多種遍歷方式以及在遍歷過程中的一些應用場景。 一、遍歷字典中的key和value 在Python中,字典是一種無…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • 二叉樹非遞歸先序遍歷c語言

    本文將為您詳細介紹二叉樹的非遞歸先序遍歷演算法,同時提供完整的C語言代碼示例。通過本文,您將了解到二叉樹的先序遍歷演算法,以及非遞歸實現的方式。 一、二叉樹的先序遍歷演算法介紹 在介紹二…

    編程 2025-04-28
  • Python如何遍歷列表

    在Python編程中,列表是一種常用的數據類型,它允許我們存儲多個值。但是,我們如何遍歷列表並對其中的每個值進行操作呢? 一、for循環遍歷列表 fruits = [‘apple’…

    編程 2025-04-28
  • Python遍歷字典刪除元素

    本文主要介紹Python中如何遍歷字典並刪除元素。在實際應用中,遍歷字典並刪除元素是一種非常常見的操作,但需要注意的是,直接在字典中刪除元素可能會改變字典中其他元素的索引順序,因此…

    編程 2025-04-28
  • Python遍歷文件夾中的shp文件

    對於GIS分析領域的開發工程師,遍歷文件夾中的shp文件是一個常見的需求。Python提供了一種非常便捷的方法來實現這個功能。本文將從以下幾個方面進行講解: 一、`os`模塊的使用…

    編程 2025-04-27
  • Python中遍歷字元串中的數字兩位數及其應用

    本文將從多個方面詳細闡述Python中遍歷字元串中的數字兩位數的應用及實現方法。 一、提取字元串中的數字兩位數 Python中提取字元串中的數字兩位數可以使用正則表達式,具體代碼如…

    編程 2025-04-27
  • Python中for循環遍歷列表

    本文將全方位詳細介紹Python中for循環遍歷列表的方法和技巧,幫助您更加深入理解並靈活運用Python中的for循環。 一、for循環遍歷列表的基礎用法 在Python中使用f…

    編程 2025-04-27
  • forof遍歷對象的詳細闡述

    forof是一種ES6的語法糖,用於遍歷可迭代對象。相較於傳統的for循環和forEach方法,forof更加簡潔、易讀,並且可以遍歷各種類型的數據。 一、基本語法 forof的基…

    編程 2025-04-25

發表回復

登錄後才能評論