在 C++ 中,myMap.end()
是 std::unordered_map
(或其他 STL 容器,如 std::map
、std::vector
等)类的成员函数,用于返回一个迭代器,该迭代器指向容器的末尾(end)。
1. 作用
myMap.end()
返回一个迭代器,指向容器中最后一个元素之后的位置。这个位置并不表示容器中的有效元素,而是一个表示"结束"的标记。
2. 主要用途
-
检查查找结果 :在使用
find()
方法查找元素时,可以通过与end()
进行比较来判断元素是否存在。例如:auto it = myMap.find(key); if (it != myMap.end()) { // key 存在,it 指向对应的元素 } else { // key 不存在 }
-
遍历容器 :在使用迭代器遍历
std::unordered_map
时,通常会使用end()
来确定循环的结束条件。例如:for (auto it = myMap.begin(); it != myMap.end(); ++it) { std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl; }
3. 与
begin()
的关系 -
begin()
返回一个迭代器,指向容器中的第一个元素,而end()
返回一个迭代器,指向最后一个元素之后的位置。有效的迭代区间是[begin(), end())
,即从第一个元素到最后一个元素(不包括end()
指向的位置)。
4. 例子
以下是一个示例代码,展示了 end()
的用法:
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<int, std::string> myMap = {
{1, "one"},
{2, "two"},
{3, "three"}
};
// 检查一个键是否存在
int keyToFind = 2;
auto it = myMap.find(keyToFind);
if (it != myMap.end()) {
std::cout << "Found: " << it->second << std::endl;
} else {
std::cout << "Key not found." << std::endl;
}
// 遍历 unordered_map
for (auto it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
}
return 0;
}
5. 注意事项
- 不能解引用
end()
返回的迭代器,因为它不指向有效的元素。解引用将导致未定义行为。 - 在执行插入或删除操作时,
end()
的位置可能会变化,因此在使用迭代器时要小心。