如何复制initializer_list
How do I copy an initializer_list?
以下内容对我来说没有任何输出。据我所知,initializer_list的生存期非常有限,复制initializer_list不会复制底层元素。我以为通过价值传递可以移动,但即使是明确的移动也不起作用。我无法将它绑定到引用,并且使用单独的引用变量在这里不起作用。即使使用矢量也不起作用??
template <typename T, typename Pred>
void for_each(T t, const Pred& pred)
{
auto local = std::vector<typename T::value_type>{t.begin(), t.end()};
for (typename decltype(local)::size_type i = 0; i < local.size(); ++i)
pred(*(i + std::begin(local)));
}
void pred(char c)
{
std::cout << c << " ";
}
int main()
{
auto arr { 1, 2, 3 };
for_each(arr, pred);
return 0;
}
您的谓词是错误的:您传递给它的是int
值,而不是char
,因此您的谓词传递了字符0x01、0x02和0x03,这些字符是不可打印的。
您可以使用:
void pred(int c)
{
std::cout << c << " ";
}
您的代码现在运行良好。
你也可以只写一个函数模板:
template<typename T>
void pred(T c)
{
std::cout << c << " ";
}
注意:
考虑使用for range编写循环:
for (auto&& v : t)
pred(v);
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- C++中带有List类的迭代器Segfault
- 使用"std::unordereded_map"映射到"std::list"对象
- GCC对可能有效的代码抛出init list生存期警告
- 使用std::list创建循环链表
- C2664 无法从'initializer list'转换参数
- 使用 std::min "no matching function for call to ‘min(<brace-enclosed initializer list>)’"时出错
- 在C++中标记化"Braced Initializer List"样式字符串(使用 Boost?
- "默认参数":无法从'initializer list'转换为'std::initializer_list'
- 无法从'initializer-list'转换为用户控制器
- 如何修复<function-style-cast>错误:无法从'initializer list'转换为asdending比较<W>(模板函子)
- 递归调用中出现错误"[Error] expression list treated as compound expression in initializer [-fpermissive]"
- VS2015无法从'initializer list'转换为'std::string'错误
- 编译器错误:"Non-aggregates cannot be initialized with initializer list."
- 无法转换...从 '<brace-enclosed initializer list>' 到 地图
- 无法将'<brace-enclosed initializer list>'转换为'double'作为回报
- <function-style-cast> 错误:无法从'initializer list'转换为'std::thread'
- initializer语言 - list不能转换为const margin *