如何复制initializer_list

How do I copy an initializer_list?

本文关键字:initializer list 复制 何复制      更新时间:2023-10-16

以下内容对我来说没有任何输出。据我所知,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);