一、 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