最近阅读<<C++ Primer>>时,遇到一道比较有意思的题目。题目如下:

假设iter的类型是vector<string>::iterator,说明下面的表达式是否合法。

*iter.empty()

不难发现,成员访问运算符 的优先级高于解引用运算符 * ,所以该表达式可以理解成先运行iter的成员函数empty()。这时我就有了一个疑问,vector的迭代器具有empty()成员函数吗?

首先给出答案,vector的迭代器没有empty()成员函数,但是vector具有empty()成员函数

vector<int> vi = { 1,2,3,4,5 };
auto iter = vi.begin(); 
vi.empty();
iter.empty();     // Error! 

vector<string> vs = { "Hello","World" };
auto iter = vs.begin();
vs.empty();
iter.empty();    // Error! 

string s = "Hello EveryOne";
s.empty();

这里也留下了一个疑问,C++ vector的迭代器和vector类型的对象之间的区别是什么?

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐