代码之家  ›  专栏  ›  技术社区  ›  nakiya

我如何使用每个输出到cout?

  •  17
  • nakiya  · 技术社区  · 14 年前

    for_each(v_Numbers.begin(), v_Numbers.end(), bind1st(operator<<, cout));

    没有明确的 for

    编辑:

    如何做到这一点 std::cin std::vector 如果可能的话?(如何阅读 n 仅限元素)?

    5 回复  |  直到 14 年前
        1
  •  30
  •   Community CDub    7 年前

    你可以利用 std::copy 变成一个 std::ostream_iterator

    std::vector<int> v_Numbers; // suppose this is the type
    // put numbers in
    std::copy(v_Numbers.begin(), v_Numbers.end(),
              std::ostream_iterator<int>(cout));
    

    std::copy(v_Numbers.begin(), v_Numbers.end(),
              std::ostream_iterator<int>(cout, "\n"));
    

    这假设您的容器是 vector<int> ,因此您必须将该部分替换为适当的类型。

    编辑

    相反,您可以从 std::istream_iterator vector 使用 std::back_inserter :

    std::vector<int> v_Numbers;
    std::copy(std::istream_iterator<int>(cin), std::istream_iterator<int>(),
              std::back_inserter(v_Numbers));
    

    this question .

        2
  •  9
  •   Cat Plus Plus    14 年前

    Boost.Lambda .

    for_each(v.begin(), v.end(), cout << boost::lambda::_1);
    
        3
  •  7
  •   Simone    14 年前

    是的,但必须使用std::copy算法:

    #include <iostream>
    #include <iterator>
    #include <vector>
    
    int main()
    {
        std::vector<int> a;
        // fill a...
        std::copy(a.begin(), a.end(), std::ostream_iterator<int>(std::cout));
    }
    
        4
  •  4
  •   Community CDub    7 年前

    YUP,使用lambda表达式(C++ 11),我们可以将STL容器的每个元素的内联打印到CUT。

    #include <iostream>   // cout
    #include <vector>     // vector
    #include <algorithm>  // for_each
    #include <iterator>   // istream_iterator
    using namespace std;
    
    int main()
    {
       std::vector<int> v(10,2);
       std::for_each(v.begin(), v.end(), [](int i)->void {std::cout << i <<endl;});
       return 0;
    }
    

    从cin到vector读取“n”值,

     int main()
     {
       std::vector<int> v;
    
       int elementsToRead;
       cin>>elementsToRead;  // Number of elements to copy
    
       // Reading from istream
       std::istream_iterator<int> ii2(std::cin);
       std::copy_n(ii2, elementsToRead, std::back_inserter(v));
    
       // printing updated vector
       std::for_each(v.begin(), v.end(), [](int i)->void {cout << i <<endl;});
    
       return 0;
    }
    

    (或)使用Lambda表达式

    std::for_each(std::istream_iterator<int>(cin),std::istream_iterator<int>(),[&v](int i)->void { v.push_back(i);});
    

    了解更多有关Lambda表达式的信息@ What is a lambda expression in C++11?

        5
  •  0
  •   Tony Delroy    14 年前

    std::ostream& operator(std::ostream& os, const std::vector<My_Type>& v)
    {
         // pick one of the other implementations for here...
        std::copy(std::istream_iterator<My_Type>(os), std::istream_iterator<My_Type>(),   
              std::back_inserter(v_Numbers));   
    }
    

    如果你有足够的礼貌(;-p)只重载你的向量的特定实例化(这需要我的类型不仅仅是一个typedef来表示int,尽管创建一个模板类来创建包装任意类型的新类型并不难),那就更好了。否则,如果其他人在翻译单元的其他地方也这样做,则流可能会变得模棱两可。