【发布时间】:2017-07-23 08:09:01
【问题描述】:
当我在 int 类型的向量上使用迭代器成员函数“empty()”时出现错误,而不是在 string 类型的向量上(根据我的理解使用正确的术语)。
int 类型的向量:
#include <iostream>
#include <string>
#include <vector>
int main()
{
vector<int> ivec = {0,1,2};
auto iter = ivec.begin();
if(!iter->empty())
cout << "not empty" << endl;
return 0;
}
输出:
error C2839: invalid return type 'int *' for overload 'operator ->'
error C2039: 'empty': is not a member of 'std::Vector_iterator....'
字符串类型的向量:
#include <iostream>
#include <string>
#include <vector>
int main()
{
vector<string> svec = {"text"};
auto iter = svec.begin();
if(!iter->empty())
cout << "not empty" << endl;
return 0;
}
输出:
not empty
更新
- 我现在了解到,根据向量中的类型,您只能执行某些操作。
- 您不是对迭代器本身执行操作(因为它是指向容器中元素的指针),而是对迭代器指向的对象执行操作。
【问题讨论】:
-
您在问
int是否与string不同。是的。 -
表 3.6。 C++ Primer,Stanley B. Lippman、Josée LaJoie、Barbara E. Moo:标准容器迭代器操作:*iter、iter-> 等。这里发生了什么?请解释一下?
-
我们没有你的书。更新此问题或发布另一个具有足够上下文的完整问题。见minimal reproducible example
-
@John 该表是否将
empty()列为标准容器迭代器操作? -
@juanchopanza 它没有。但我认为它暗示了这一点。我明白现在发生了什么。
标签: c++ c++11 visual-c++