首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ vector 容器的 4 種遍歷方式

     編輯:關於C++

一、準備:定義結構體與數據

struct Vec2 { float x, y; Vec2(float x=0,float y=0):x(x),y(y){} };
struct Vec3 { float x, y, z; Vec3(float x=0,float y=0,float z=0):x(x),y(y),z(z){} };
struct Obj { vector tex; vector vert; };

Obj obj;
obj.tex.push_back(Vec2(0.1, 0.2));
obj.tex.push_back(Vec2(0.2, 0.7));
obj.vert.push_back(Vec3(0.0, 0.5, 0.8));
obj.vert.push_back(Vec3(0.7, 0.67, 0.89));

二、四種遍歷方式

1. 迭代器(傳統)

for (vector::iterator it = obj.tex.begin(); it != obj.tex.end(); ++it) {
    cout << it->x << " " << it->y << endl;
}

2. auto 關鍵字簡化迭代器 (C++11)

for (auto it = obj.tex.begin(); it != obj.tex.end(); ++it) {
    cout << it->x << " " << it->y << endl;
}

3. 下標訪問

for (size_t i = 0; i < obj.tex.size(); ++i) {
    cout << obj.tex[i].x << " " << obj.tex[i].y << endl;
}

4. 基於範圍的 for 循環 (C++11,最推薦)

for (auto& v : obj.tex) { // 引用避免拷貝
    cout << v.x << " " << v.y << endl;
}
// 或值語義(僅讀)
for (auto v : obj.tex) { cout << v.x << " " << v.y << endl; }

三、總結

  • 方式 1、2 通用於所有容器,需包含 <iterator>
  • 方式 3 僅適用於隨機訪問容器(vector、deque、string)
  • 方式 4 語法最簡潔、可讀性最強,現代 C++ 首選
  • 遍歷時若需修改元素,使用引用 auto&;僅讀用 const auto& 或值

熟練掌握 vector 遍歷是 C++ 基礎功底。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved