Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何通过操作员<&书信电报;字符串作为参数?_C++ - Fatal编程技术网

C++ 如何通过操作员<&书信电报;字符串作为参数?

C++ 如何通过操作员<&书信电报;字符串作为参数?,c++,C++,我想这样做: vector<string> road_map; // do some stuff for_each(road_map.begin(), road_map.end(), bind(cout, &ostream::operator<<)); [](const string& str){ cout << str << endl; } 矢量路线图; //做点什么 对于每个(road\u map.begin()、road\

我想这样做:

vector<string> road_map;
// do some stuff
for_each(road_map.begin(), road_map.end(), bind(cout, &ostream::operator<<));
[](const string& str){ cout << str << endl; }
矢量路线图;
//做点什么

对于每个(road\u map.begin()、road\u map.end()、bind(cout)和ostream::operator,您可以使用ostream\u迭代器生成输出

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>

int main()
{
    std::vector<std::string> road_map{"ab", "cde"};
    // do some stuff
    std::copy(road_map.begin(), road_map.end(),
              std::ostream_iterator<std::string>(std::cout, "\n"));
}
#包括
#包括
#包括
#包括
#包括
int main()
{
std::矢量路线图{“ab”,“cde”};
//做点什么
复制(路线图.begin(),路线图.end(),
std::ostream_迭代器(std::cout,“\n”);
}

您可以使用ostream\u迭代器生成输出

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>

int main()
{
    std::vector<std::string> road_map{"ab", "cde"};
    // do some stuff
    std::copy(road_map.begin(), road_map.end(),
              std::ostream_iterator<std::string>(std::cout, "\n"));
}
#包括
#包括
#包括
#包括
#包括
int main()
{
std::矢量路线图{“ab”,“cde”};
//做点什么
复制(路线图.begin(),路线图.end(),
std::ostream_迭代器(std::cout,“\n”);
}

此答案主要用于调查
C++编译器将为lambda
声明创建辅助代码


您应该注意到,没有成员函数
ostream::operator此答案主要用于调查
C++编译器将为lambda
声明创建辅助代码


你应该注意到没有成员函数<代码> oStudio::操作程序使用lambda有什么不对?它非常适合这个任务。你实际遇到了什么问题?你需要更具体。C++编译器会为lambdas生成额外的辅助代码,我想只有使用更轻量级的解决方案。operator@LmTinyToon因为

bind
是一个轻量级的解决方案?实际上,在这种情况下,为什么不简单地使用循环的范围基呢?“C++编译器将为lambdas生成额外的辅助代码”。你为什么在意?你是否验证过它会造成不可接受的性能瓶颈?每个
都可能生成一个lambda或基于范围的循环,因为编译器无论如何都会插入循环。bind变量也可能生成相同的代码,但如果代码更糟,我不会感到惊讶,因为bind对象可以是重量级的。你也应该看看STD::OrthuleType,它确实是你所要达到的。使用lambda有什么不对?它非常适合这个任务。你实际遇到什么问题?你需要更具体。C++编译器会为lambdas生成额外的辅助代码,我想还有更多的LUTW。八解operator@LmTinyToon因为
bind
是一个轻量级的解决方案?实际上,在这种情况下,为什么不简单地使用循环的范围基呢?“C++编译器将为lambdas生成额外的辅助代码”。你为什么在意?你是否验证过它会造成不可接受的性能瓶颈?每个
都可能生成一个lambda或基于范围的循环,因为编译器无论如何都会插入循环。bind变量也可能生成相同的代码,但如果代码更糟,我不会感到惊讶,因为bind对象可以是重量级的。另外,您还应该看看std::ostream_迭代器,它正是您想要实现的。
        push    rbp
        push    rbx
        sub     rsp, 8
        mov     rbp, QWORD PTR [rdi+8]
        mov     rbx, QWORD PTR [rdi]
        cmp     rbx, rbp
        je      .L22
.L24:
        mov     rdx, QWORD PTR [rbx+8]
        mov     rsi, QWORD PTR [rbx]
        mov     edi, OFFSET FLAT:std::cout
        add     rbx, 32
        call    std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)
        cmp     rbp, rbx
        jne     .L24
.L22:
        add     rsp, 8
        pop     rbx
        pop     rbp
        ret
void  funcLambda(std::vector<std::string>& a)  
{
  std::for_each(
    a.begin(),
    a.end(),
    [](const std::string& b){std::cout << b;});
}
        push    rbp
        push    rbx
        sub     rsp, 8
        mov     rbp, QWORD PTR [rdi+8]
        mov     rbx, QWORD PTR [rdi]
        cmp     rbx, rbp
        je      .L27
.L29:
        mov     rdx, QWORD PTR [rbx+8]
        mov     rsi, QWORD PTR [rbx]
        mov     edi, OFFSET FLAT:std::cout
        add     rbx, 32
        call    std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)
        cmp     rbp, rbx
        jne     .L29
.L27:
        add     rsp, 8
        pop     rbx
        pop     rbp
        ret