std :: vector :: front()和begin()之间的区别

Ang*_*ber 4 c++ vector standard-library

帮助vectorfront()

返回对向量容器中第一个元素的引用.与vector::begin将一个迭代器返回到同一元素的member不同,这个>函数返回一个直接引用.

关于矢量的帮助说 begin()

返回引用向量容器中第一个元素的迭代器.请注意,与member vector::front(返回对第一个元素的引用)不同,> this函数返回一个随机访问迭代器.

这段代码输出:

char arr[] = { 'A', 'B', 'C' };
vector<char> vec(arr, arr+sizeof(arr));
cout << "address of vec.front() " << (void*)&vec.front() << endl;
cout << "address of vec.begin() " << (void*)&vec.begin() << endl;
Run Code Online (Sandbox Code Playgroud)

地址vec.front() 00401F90 的地址vec.begin() 0030F494

我不明白"直接参考"是什么意思?在begin()不是一个random access iterator只是一个pointer

有人可以指出区别吗?

bn.*_*bn. 12

斯特劳斯C++编程语言,第16.3.3节; 认为front()是第一个元素,也是第一个元素begin()的指针.

  • 我喜欢这个答案的简单性 (2认同)

Luc*_*ore 8

在begin()的情况下,是不是随机访问迭代器只是一个指针?

不,迭代器有一些指针语义,但它实际上是一个类.

即使它是,那应该回答这个问题.这就像问为什么指针的地址与它指向的对象的地址不一样.

如果取消引用迭代器,你将获得相同的值,这将为您提供第一个元素:

&(*vec.begin())
Run Code Online (Sandbox Code Playgroud)

因为

*vec.begin() == vec.front()
Run Code Online (Sandbox Code Playgroud)