C++迭代器的语法是什么语法

vector<int> v;
vector<int>::iterator a=v.begin();//这是什么??
c++中几时有这种语法,用一个类加上域的操作符去在没有实例化的类下的私有成员变量??
甚至于直接这样写都是正确的:
vector<int>::iterator a;//没有实例v,没有初始化??
为什么我自己写的代码,这样访问就是错的??

vector<int> v; //实例化一个类,名字为v

vector<int>::iterator a=v.begin();//vector<int>::iterator是vector<int>中的一个元素地址(不是元素),地址赋值给变量a
> vector<int>::iterator a;//没有实例v,没有初始化??
相当于float a;,前面的vector<int>::iterator是变量类型。

因为a是地址,使用的时候需要写成这样: cout << *a << endl;追问

你想说明可以在类的定义中定义一个不是类的成员的变量,比如说这个怪胎iterator,并且可以用域操作符来访问它,能举个例子吗?这种情况可能吗?

追答

vector::iterator是一个类型名(类名),不是变量名。
template >
class vector : public _GLIBCXX_STD_C::vector
{
public:
typedef typename _Base::reference reference;
typedef typename _Base::const_reference const_reference;
typedef __iterator_tracker iterator;
typedef __iterator_tracker const_iterator;
.....
}

追问

template >
typename _Allocator = std::allocator 是什么意思啊,typename还可以这样用,而且这个赋值语句看上去也很离奇,这不会是stl的代码吧

追答

这不就是像函数入口参数的默认值嘛。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-01
vector<int>::iterator a 告诉你这是一个迭代器。
if(a = v.begin();a!=v.end();a++)//
{

}
iterator start;//v.begin() return
iterator finish;//v.end() return
第2个回答  2013-04-01
vector 是一个容器。
vector<int>::iterator a=v.begin();//这是什么??

iterator 是迭代器,相当于是数组的下标,用于查找确认的,这里给他赋值为v.begin();
那么必须确定的是2点,一点v 必须是int类型数据的容器,2,v里面至少有1个数据、
vector<int>::iterator a;//没有实例v,没有初始化??

迭代器也有这他自己的构造函数的。
可以没有初始化,就像你定义一个数组,可以直接为 int a[10];
为什么我自己写的代码,这样访问就是错的??

你是如何访问的,如果a=v.begin();了,那么你要访问v.begin()的数据,直接*a 就好了。
相似回答