用std::begin和成员函数版begin之间有什么区别
时间: 2024-03-22 11:37:29 浏览: 69
`std::begin` 是一个泛型函数,用于获取容器的起始迭代器,它可以用于标准容器、内置数组和用户自定义类型等。而成员函数版 `begin` 是容器类的成员函数,只能用于容器类型。
使用 `std::begin` 可以在一些通用的算法中方便地获取容器的起始迭代器,例如:
```cpp
std::vector<int> vec{1, 2, 3, 4};
auto beg = std::begin(vec); // 用 std::begin 获取 vec 的起始迭代器
auto end = std::end(vec); // 用 std::end 获取 vec 的结束迭代器
std::for_each(beg, end, [](int x) { std::cout << x << " "; }); // 输出 1 2 3 4
```
而使用成员函数版 `begin` 则需要针对不同的容器类型分别调用,例如:
```cpp
std::vector<int> vec{1, 2, 3, 4};
auto beg = vec.begin(); // 用成员函数 begin 获取 vec 的起始迭代器
auto end = vec.end(); // 用成员函数 end 获取 vec 的结束迭代器
std::for_each(beg, end, [](int x) { std::cout << x << " "; }); // 输出 1 2 3 4
```
总的来说,使用 `std::begin` 可以使代码更加通用和可读性更高,而使用成员函数版 `begin` 则更符合面向对象的编程思想。
阅读全文