【发布时间】:2020-11-07 07:05:58
【问题描述】:
begin() 和data() 都返回指向第一个元素的迭代器。但是,data() 的定义说它返回一个指向内存数组的直接指针,该内存数组由向量内部用于存储其拥有的元素。我也可以使用它们来访问任何元素。那么,两者有什么不同呢?考虑下面的例子,
#include <iostream>
#include <vector>
int main() {
std::vector<int> v;
v.reserve(5);
for (int i = 1; i <= 5; i ++) v.push_back(i);
auto it = v.begin();
auto pos = v.data();
std::cout << "First element : " << *it << std::endl;
std::cout << "First element : " << *pos << std::endl;
std::cout << "Third element : " << it[2] << std::endl;
std::cout << "Third element : " << pos[2] << std::endl;
}
【问题讨论】:
-
你错了。这些方法中只有一个返回迭代器。另一个没有。
-
@SamVarshavchik 从某种角度来看,OP 实际上并没有错。指针是有效的迭代器。迭代器旨在模仿指针。所以,从这个意义上说,
begin()和data()都将迭代器返回到第一个元素,只是迭代器类型不同。