下面的代码无法正常工作,当我引用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
中没有插入元素。
由于没有插入任何元素,因此it
与vv.end()
相同,因此对其无效。
您可以在插入后通过检查vv
的长度来验证它。参见sample code here进行检查。