分析:由于list<int>与vector<double>是不同的容器类型,因此无法采用容器拷贝初始化方式。但前者的元素类型是int,与后者的元素类型double是相容的,因此可以采用范围初始化方式来构造一个vector<double>,令它的元素值与list<int>完全相同。vector<int>与之类似!
代码分析与实现:
#include<iostream>
#include<vector>
#include<list>
using namespace std;
int main(){
list<int> ilist = {1,2,3,4,5,6,7};
vector<int> ivec = {7,6,5,4,3,2,1};
//vector<double> ivec(ilist);//容器类型与容器内元素类型不同无法直接使用拷贝的方式进行初始化
vector<double> dvec(ilist.begin(),ilist.end());//初始化成功
//vector<double>dvecl(ivec);//容器内元素类型不同无法直接使用拷贝的方式进行初始化
vector<double> dvec1(ivec.begin(),ivec.end());//初始化成功
cout<<dvec.capacity()<<" "<<dvec.size()<<" "
<<dvec[0]<<" "<<dvec[dvec.size()-1]<<endl;
cout<<dvec1.capacity()<<" "<<dvec1.size()<<" "
<<dvec1[0]<<" "<<dvec1[dvec1.size()-1]<<endl;
return 0;
}
注:当容器类型不同,但元素类型相容时,可以使用范围初始化的方式进行初始化。
|