下面的代码无法正常工作,当我引用it时,它会导致Member call on null pointer error,如果不支持,为什么会允许使用insert(end, {})(无编译错误)。

#include <vector>
#include <iostream>
using namespace std;
int main() {
    vector<vector<pair<int, int>>> vv;
    auto it = vv.insert(vv.end(), {});
    cout << it->size() << endl;
}
当我更改{} to vector<pair<int, int>>时,没有错误显示并打印0
通过注释解决,它调用iterator insert( const_iterator pos, std::initializer_list<T> ilist ),因此将其更改为insert(end, {{}})可以起作用。

最佳答案

auto it = vv.insert(vv.end(), {});行的格式为 iterator insert( const_iterator pos, std::initializer_list<T> ilist );
auto it = vv.insert(vv.end(), {});行一样,初始化程序列表中没有元素,因此 vector vv中没有插入元素。
由于没有插入任何元素,因此itvv.end()相同,因此对其无效。
您可以在插入后通过检查vv的长度来验证它。参见sample code here进行检查。

09-08 09:36