我想要理解C++ STL容器的初始化。以下是我遇到的噩梦:
vector<int> V0 ({ 10, 20 }); // ok - initialized with 2 elements
vector<int> V1 = { 10, 20 }; // ok - initialized with 2 elements
vector<int> V2 = {{ 10, 20 }}; // ok - initialized with 2 elements
vector<int> V3 = {{ 10 }, 20 }; // ok - initialized with 2 elements
vector<int> V4 { 10, 20 }; // ok - initialized with 2 elements
vector<int> V5 {{ 10, 20 }}; // ok - initialized with 2 elements
vector<int> V6 {{ 10 }, 20 }; // ok - initialized with 2 elements
queue<int> Q0 ({ 10, 20 }); // ok - initialized with 2 elements
// queue<int> Q1 = { 10, 20 }; // compile error
// queue<int> Q2 = {{ 10, 20 }}; // compile error
// queue<int> Q3 = {{ 10 }, 20 }; // compile error
// queue<int> Q4 { 10, 20 }; // compile error
queue<int> Q5 {{ 10, 20 }}; // ok - initialized with 2 elements
// queue<int> Q6 {{ 10 }, 20 }; // compile error
我们正在谈论C++11。
我做了一些研究,以下是我的问题:
1. 我认为编译错误是因为queue的initializer_list构造函数缺失。请参阅vector:http://www.cplusplus.com/reference/vector/vector/vector/和queue:http://www.cplusplus.com/reference/queue/queue/queue/,我的理解正确吗?
2. 现在对于从V0到V6的所有向量,我理解V0、V1、V4。有人可以帮我理解V2、V3、V5和V6吗?
3. 我不太理解Q0或Q5。有人可以帮助我吗?
我还在阅读Mike Lui的文章:“Initialization in C++ is Seriously Bonkers”。我想与大家分享,但是否有快速帮助我理解这个噩梦的方法? :-)
std::vector<int> V7(10, 20);
用10个元素初始化V7
:Demo on coliru。 - Scheff's Cat