c++ primer里的一道课后题
这里给出解决方案
直接上代码
#include<cstdio>
#include <list>
#include <iostream>
#include<vector>
#include<string>
using namespace std;
using std::vector;
using std::string;
int main()
{
list<int> l{1,2,3,4,5};
list<int> ll(l);
vector<int> v(l.begin(),l.end());
for(auto x = v.begin(); x!=v.end() ;x++)
{
cout<<*x<<" ";
}
cout<<endl;
return 0;
}
Xcode上是可以跑通的。
直接进行拷贝初始化一定会报错,强制转型也没能成功,但是这样的方法却可以实现。
vector的初始化有:
vector<int> list = {1,2,3.0,4,5,6,7};
vector<int> list {1,2,3.0,4,5,6,7};
这样的初始化
也有
vector<int> v(2,6);//这样出来,v里面是两个6
而如果使用迭代器(c++ primer 299页)
vector<int> v(l.begin(),l.end());
这样的初始化c++也是支持的
个人理解:列表中元素必须与list的元素类型相容,本例中必须是与整数类型相容的类型,整形会直接进行拷贝初始化,其他类型会进行类型转换。
list<>::iterator在这里会隐式类型转换为int。