gpt4 book ai didi

c++ - 在指针 vector 上使用 ostream_iterator

转载 作者:太空狗 更新时间:2023-10-29 20:57:27 26 4
gpt4 key购买 nike

这是我的代码:

std::vector<int*> osd;
osd.push_back(new int(2));
osd.push_back(new int(3));

std::ostream_iterator<int*, char> out_iter2(std::cout, " " );
copy(osd.begin(),osd.end(), out_iter2);

输出:0x8e6388 0x8e6a8

如何让迭代器打印实际值?我需要专门化它吗?

我为它做了一个专门的运算符,但它仍然不起作用

std::ostream& operator<<(std::ostream& os, const std::vector<int*>::iterator pd)
{
return os << *pd << std::endl;
}

最佳答案

您可以使用 std::transform使用 lambda 表达式,从指针获取实际值,例如:

std::ostream_iterator<int, char> out_iter2(std::cout, " " );
std::transform(osd.begin(),
osd.end(),
out_iter2,
[] (int* x) { return *x; }
);

DEMO

编辑

这是来自上述链接的可能的实现图像:

template<class InputIt, class OutputIt, class UnaryOperation>
OutputIt transform(InputIt first1, InputIt last1, OutputIt d_first,
UnaryOperation unary_op)
{
while (first1 != last1) {
*d_first++ = unary_op(*first1++);
}
return d_first;
}

关于c++ - 在指针 vector 上使用 ostream_iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30634226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com