如何使用for_each输出到cout?
有没有更直接的方法来做到这一点?
for_each(v_Numbers.begin(), v_Numbers.end(), bind1st(operator<<, cout));
如果可能的话,没有显式的 for
循环。
编辑:
如果可能的话,如何使用 std::vector
对 std::cin
执行此操作? (如何仅读取 n
个元素)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您可以使用
std::copy
来实现此目的进入std::ostream_iterator
:它会如果添加一些后缀就更好了:
这假设您的容器是一个
vector
,因此您必须用适当的类型替换该部分。关于读取输入的编辑:
相反,您可以从 使用std::istream_iterator转换为
向量
rel="nofollow noreferrer">std::back_inserter
:如果只想读取n个元素,请查看这个问题。
You could achieve this using
std::copy
into astd::ostream_iterator
:It would be even nicer if you add some suffix:
This assumes that your container is a
vector<int>
, so you will have to replace that part with the appropriate type.Edit regarding reading input:
Conversely, you can copy from a range of
std::istream_iterator
into avector
usingstd::back_inserter
:If you want to read n elements only, look at this question.
另一种选择 - Boost.Lambda。
Another option — Boost.Lambda.
是的,但你必须使用 std::copy 算法:
Yep, but you must use std::copy algorithm:
是的,使用 lambda 表达式 (C++ 11),我们可以将 STL 容器的每个元素内联打印到 cout。
用于将“n”个值从 cin 读取到向量,
(或)使用 Lambda 表达式
要了解有关 Lambda 表达式的更多信息 @ C++11 中的 lambda 表达式是什么?
yup, using lambda expression (C++ 11) we can inline printing of each element of a STL container to cout.
For reading "n" values from cin to vector,
(or) by using Lambda expression
To know more about Lambda expression @ What is a lambda expression in C++11?
在公司代码中并不总是合适,但为了枚举选项 - 如果您确实发现其他 for_each / std::copy 等解决方案太冗长,您可以写:
如果您彬彬有礼,那就更好了 (;-p )足以仅重载您的特定向量实例(这要求 My_Type 不仅仅是一个 typedef 来表示 int,尽管创建一个模板类来创建包装任意类型的新类型并不难)。否则,如果其他人在您的翻译单元的其他地方执行相同的操作,则流式传输可能会变得不明确。
Not always appropriate in corporate code, but for the sake of enumerating options - if you really find other for_each / std::copy etc. solutions too verbose, you could write:
It's much nicer if you're well-mannered (;-p) enough to only overload your specific instantiation of vector (which requires My_Type be more than a typedef to say int, though it's not hard to create a templated class to create new types wrapping an arbitrary type). Otherwise, if someone else does the same elsewhere in your translation unit, the streaming could become ambiguous.
我知道使用迭代器进行复制是最佳解决方案,但只是用 for_each 进行回答。
你可以这样做:
但是,对我来说,简单的
for
确实更具可读性......I know the
copy
with the iterator is the optimal solution, but just to answer withfor_each
.You could do:
But, for me, it's REALLY much more readable the simple
for
...