C++ 迭代器解引用问题
classCheckoutRecord{public:friendstd::ostream&operator<<(std::ostream&,constCheckoutR...
class CheckoutRecord{
public:
friend std::ostream& operator<<(std::ostream&,const CheckoutRecord&);
private:
double book_id;
vector<pair<string,string>* >wait_list;
};
ostream& operator<<(ostream& out,const CheckoutRecord& c){
out<<c.book_id<<endl;
for(vector<pair<string,string>* >::const_iterator iter =
c.wait_list.begin();iter != c.wait_list.end();++iter){
out<<(*iter)->first<<","<<
(*iter)->second<<endl;
}
return out;
}
//这里的迭代器iter解引用后是指针,是什么类型的指针?指向VECTOR的还是什么?
为什么要解引用呢?是什么导致让他解引用的?是因为PAIR<STRING,STRING>*,还是因为VECTOR?怎么才知道迭代器需要不需要解引用呢? 展开
public:
friend std::ostream& operator<<(std::ostream&,const CheckoutRecord&);
private:
double book_id;
vector<pair<string,string>* >wait_list;
};
ostream& operator<<(ostream& out,const CheckoutRecord& c){
out<<c.book_id<<endl;
for(vector<pair<string,string>* >::const_iterator iter =
c.wait_list.begin();iter != c.wait_list.end();++iter){
out<<(*iter)->first<<","<<
(*iter)->second<<endl;
}
return out;
}
//这里的迭代器iter解引用后是指针,是什么类型的指针?指向VECTOR的还是什么?
为什么要解引用呢?是什么导致让他解引用的?是因为PAIR<STRING,STRING>*,还是因为VECTOR?怎么才知道迭代器需要不需要解引用呢? 展开
1个回答
2012-02-18
展开全部
iter解引用得到的是指向pair<string,string>类型指针。由于vector的元素是指针,所以(*iter)得到的元素可以使用取成员运算符“->”。
如果是你说的“指向vector的”,应当是类似这样的形式:vector< vector<Typename> * >。
迭代器这一概念本身就是重载过operator * 用来解引用得到元素的,这和是不是vector无关,不仅是vector,queue等等其他类型迭代器全部都是要解引用的。所以不必谈“怎么知道”,迭代器全部都要解引用,除非你不是想用它来得到元素。
如果是你说的“指向vector的”,应当是类似这样的形式:vector< vector<Typename> * >。
迭代器这一概念本身就是重载过operator * 用来解引用得到元素的,这和是不是vector无关,不仅是vector,queue等等其他类型迭代器全部都是要解引用的。所以不必谈“怎么知道”,迭代器全部都要解引用,除非你不是想用它来得到元素。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询