C++中的迭代器(Iterator)是一種用于遍歷容器(如數(shù)組、向量、列表等)的對象。迭代器提供了對容器元素的訪問,并支持某些基本操作。以下是C++迭代器的基本操作:
解引用(Dereference):使用*
運算符可以獲取迭代器當(dāng)前指向的元素。例如:
std::vector<int> vec = {1, 2, 3};
std::vector<int>::iterator it = vec.begin();
int value = *it; // value 現(xiàn)在是 1
成員訪問(Member Access):對于復(fù)雜類型的容器(如結(jié)構(gòu)體或類),可以使用->
運算符訪問其成員。例如:
struct Person {
std::string name;
};
std::vector<Person> people = {{"Alice"}, {"Bob"}};
std::vector<Person>::iterator it = people.begin();
std::string name = it->name; // name 現(xiàn)在是 "Alice"
自增(Increment):使用++
運算符可以將迭代器移動到下一個元素。例如:
std::vector<int> vec = {1, 2, 3};
std::vector<int>::iterator it = vec.begin();
++it; // it 現(xiàn)在指向第二個元素(值為 2)
自減(Decrement):對于支持雙向迭代器(Bidirectional Iterator)的容器(如std::set
、std::multiset
、std::map
、std::multimap
等),可以使用--
運算符將迭代器移動到上一個元素。例如:
std::set<int> s = {1, 2, 3};
std::set<int>::iterator it = s.find(2);
--it; // it 現(xiàn)在指向第一個元素(值為 1)
比較(Comparison):可以使用==
和!=
運算符比較兩個迭代器是否相等或不相等。例如:
std::vector<int> vec = {1, 2, 3};
std::vector<int>::iterator it1 = vec.begin();
std::vector<int>::iterator it2 = vec.begin() + 1;
bool isEqual = (it1 == it2); // isEqual 是 false
bool isNotEqual = (it1 != it2); // isNotEqual 是 true
賦值(Assignment):可以使用=
運算符將一個迭代器賦值給另一個迭代器。例如:
std::vector<int> vec = {1, 2, 3};
std::vector<int>::iterator it1 = vec.begin();
std::vector<int>::iterator it2;
it2 = it1; // it2 現(xiàn)在指向第一個元素(值為 1)
距離(Distance):對于支持隨機訪問迭代器(Random Access Iterator)的容器(如std::vector
、std::array
、std::deque
等),可以使用-
運算符計算兩個迭代器之間的距離。例如:
std::vector<int> vec = {1, 2, 3};
std::vector<int>::iterator it1 = vec.begin();
std::vector<int>::iterator it2 = vec.begin() + 1;
int distance = it2 - it1; // distance 是 1
數(shù)組索引(Array Indexing):對于支持隨機訪問迭代器的容器,還可以使用[]
運算符訪問迭代器指向的元素。例如:
std::vector<int> vec = {1, 2, 3};
std::vector<int>::iterator it = vec.begin();
int value = it[1]; // value 現(xiàn)在是 2
請注意,并非所有容器都支持所有這些操作。例如,std::forward_list
只支持單向迭代,因此不支持遞減、隨機訪問和比較操作。在使用迭代器時,請確保了解所使用的容器類型及其支持的操作。