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