gpt4 book ai didi

c++ - 如何复制 initializer_list?

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:45 26 4
gpt4 key购买 nike

以下不会为我输出任何内容。据我了解,initializer_list 的生命周期非常有限,复制 initializer_list 不会复制底层元素。我认为按值传递将允许移动,即使是显式移动也不起作用。我无法将它绑定(bind)到一个引用,并且使用单独的引用变量在这里不起作用。即使使用 vector 也不起作用??

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 << " ";
}

你的代码现在可以工作了 fine .

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

template<typename T>
void pred(T c)
{
std::cout << c << " ";
}

注意:

考虑用 for-range 编写循环:

for (auto&& v : t)
pred(v);

关于c++ - 如何复制 initializer_list?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26322345/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com