gpt4 book ai didi

c++ - 为什么 std::vector::insert 是一个带有空初始化列表的无操作?

转载 作者:行者123 更新时间:2023-12-02 18:09:54 26 4
gpt4 key购买 nike

在下面的代码中:

#include <iostream>
#include <vector>

int main()
{
std::cout<<"Hello World";
std::vector<std::vector<int>> v;
while(v.size() <= 2){
v.insert(v.begin(),{}); //1
std::cout << "!";
}
return 0;
}

每次迭代的输出都变得越来越激进,因为尽管进行了插入操作,但v.size()永远不会增加。

但是,当 initializer_list 中有一个元素或替换为临时元素时,循环会按预期运行多次。

...
v.insert(v.begin(),{0}); //1
...
...
v.insert(v.begin(),std::vector<int>()); //1
...

这是为什么呢?如果隐式转换失败,不应该出现编译错误吗?

最佳答案

您的代码要求将初始化列表中尽可能多的项目惰性化到 vector 中。由于初始化列表中没有任何项目,因此不会插入任何内容。

我不确定您的期望是什么,也许您期望从初始化列表创建一个 vector 并插入该 vector ,即

v.insert(v.begin(),std::vector<int>{})

但这并没有发生,因为 vector<T>::insert有一个重载,需要 initializer_list<T>直接(其行为如我上面所述)。

关于c++ - 为什么 std::vector::insert 是一个带有空初始化列表的无操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72570811/

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