首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何复制initializer_list?

如何复制initializer_list?
EN

Stack Overflow用户
提问于 2014-10-12 13:58:10
回答 1查看 217关注 0票数 2

下面的代码没有为我输出任何内容。据我所知,initializer_list的生命周期非常有限,复制initializer_list不会复制底层元素。我认为通过值传递将允许移动,即使是显式的移动也不起作用。我不能将它绑定到引用,并且使用单独的引用变量在这里不起作用。即使使用向量也不起作用??

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2014-10-12 14:07:41

您的谓词是错误的:您向它传递的是int值,而不是char,因此向您的谓词传递的字符是0x01、0x02和0x03,这些字符是不可打印的。

您可以使用:

代码语言:javascript
复制
void pred(int c)
{
    std::cout << c << " ";
}

您的代码现在可以在fine上运行了。

您也可以只编写一个函数模板:

代码语言:javascript
复制
template<typename T>
void pred(T c)
{
    std::cout << c << " ";
}

备注:

考虑使用for-range编写循环:

代码语言:javascript
复制
for (auto&& v : t)
    pred(v);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26322345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档