gpt4 book ai didi

c++ - 提取 std::initializer_list C++ 的一部分

转载 作者:太空狗 更新时间:2023-10-29 20:09:08 26 4
gpt4 key购买 nike

我有一个方法 bar(...),它接受一个 std::initializer_list 类型的参数。该方法调用另一个方法 foo(...),该方法也采用 std::initializer_list 类型的参数。应使用与 bar 相同的参数调用 foo,但不包含 initializer_list 的第一个元素。

bar(std::initializer_list<int> l)
{
...
auto l = t.begin();
++l;
foo(new std::initializer_list<int>(l, t.end()));
}

我试过上面的代码,但我刚刚意识到 std::initializer_list 不能从 initializer_list 开头和结尾的迭代器构造,并给出预期的结果。它将迭代器解析为整数。

auto t = new std::initializer_list<int>{1, 2, 3, 4, 5};
auto l = t.begin();
++l;
auto k = new std::initializer_list<int>(l, t.end());

这让我的问题变得更难了。

另一个想法是将 std::initializer_list 转换为数组,然后将数组转换回 std::initializer_list,但更短。这对我来说似乎很愚蠢。而且我不太确定如何在运行时制作 std::initializer_list ,即使在该数组的帮助下也是如此。

最佳答案

初始化列表是值的简单包装器,使用列表语法 { 1, 2, 3 } 声明。它的通常目的是传递给某个函数,该函数将以更智能的方式处理初始化列表中的对象。

初始化列表没有修饰方法,也没有接受迭代器的构造函数。

数组的想法更合适。示例:

void bar( std::vector<int> _a)
{
for( int x : _a )
std::cout << x << ' ';
}

void foo( std::initializer_list<int> _a)
{
bar( {_a.begin() + 1, _a.end()} );
}

int main()
{
foo( {1, 2, 3} );
return 0;
}

关于c++ - 提取 std::initializer_list<T> C++ 的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48962076/

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