使用基于范围的for循环取消对矢量指针的引用

Dereferencing vector pointers with a range based for loop

本文关键字:取消 循环 引用 指针 for 于范围 范围      更新时间:2023-10-16

这是我的main((函数中的代码:

std::map<int, std::string> candyMap;
std::vector<House*> houseVector;
std::ifstream abodeFile{houseFile};
std::string houseLine;
if(abodeFile.is_open())
{
while(getline(abodeFile, houseLine))
{
houseVector.push_back(new House(houseLine, candyMap));
}
}
std::cout << std::setw(11) << " ";
for(auto i:houseVector)
{
std::cout << std::setw(11) << i;
} 

我正试图打印出houseVector中的元素。显然,通过上面的代码,我得到了元素的地址。当我执行*i时,<<会出现运算符错误。在这里取消引用的正确方法是什么?

您需要重载ostream <<运算符,例如:

class House
{
int member;
public:
explicit House (int i) : member(i) {}
friend ostream& operator<<(ostream& os, const House& house);
};
ostream& operator<<(ostream& os, const House& house)
{
os <<house.member << 'n';
return os;
}

Godbolt 直播


或者没有朋友:

class House
{
int member;
public:
explicit House (int i) : member(i) {}
std::ostream &write(std::ostream &os) const { 
os<<member<<'n';
return os;
}
};
std::ostream &operator<<(std::ostream &os, const House& house) { 
return house.write(os);
}

Godbolt 直播