我正在尝试使用ostream_iterator和显示对象上的指针向量operator <<.因此,我覆盖了operator <<.我总是得到矢量元素地址的问题.如何使迭代器打印实际值?我需要专门化吗?
class A {
private:
double x;
long y;
public:
A(long xx, double yy) :x(xx), y(yy){};
~A();
void Display();
};
template<typename T>
std::ostream &operator <<(std::ostream &os, const std::vector<T> &v) {
using namespace std;
copy(v.begin(), v.end(), ostream_iterator<T>(os, "\n"));
return os;
}
int main()
{
std::vector<A*> aVect;
FillA(aVect);
cout << accountVect;
return 0;
}
//
output
00657990
006579D0
00657A48
Run Code Online (Sandbox Code Playgroud)
你可以写一个operator<<重载A*,但是首先取消引用指针会更好一点,如:
template<typename T>
std::ostream &operator <<(std::ostream &os, const std::vector<T *> &v) {
std::transform(v.begin(), v.end(),
ostream_iterator<T>(os, "\n"),
[](T const *ptr) -> T const& { return *ptr; }
);
return os;
}
Run Code Online (Sandbox Code Playgroud)
然后写出通常的operator<<重载A.
注意 - 正如评论中提到的@WhozCraig,您现有的代码不会打印向量元素的地址,而是按照您的要求打印向量元素,并且该元素是一个地址.如果可以的话,最简单的解决方法是首先使用a vector<A>.
但是,我假设您需要保留vector<A*>并希望打印取消引用的A对象.
此外,我坚持使用您的原始模板,但不完全清楚非模板化operator<<(ostream&, vector<A*> const &)是否更清晰.
| 归档时间: |
|
| 查看次数: |
756 次 |
| 最近记录: |