如何从一个 list<int>初始化一个 vector<double>?从一个vector<int>又该如何创建?编写代码验证你的答案。
时间: 2023-05-11 12:04:04 浏览: 103
可以使用vector的构造函数来从list中初始化vector,代码如下:
```c++
#include <iostream>
#include <vector>
#include <list>
int main() {
std::list<int> l = {1, 2, 3, 4, 5};
std::vector<double> v(l.begin(), l.end());
for (auto i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
std::vector<int> v2 = {1, 2, 3, 4, 5};
std::vector<double> v3(v2.begin(), v2.end());
for (auto i : v3) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
```
输出结果为:
```
1 2 3 4 5
1 2 3 4 5
```
其中,第一个vector是从list中初始化的,第二个vector是从vector中初始化的。
相关问题
如何从一个 list<int>初始化一个 vector<double>?从一个 vector<int>又 该如何创建?编写代码验证你的答案。
从一个 `list<int>` 初始化一个 `vector<double>` 可以通过 `vector` 的构造函数来实现,代码如下:
```cpp
#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main() {
list<int> li {1, 2, 3, 4, 5};
vector<double> vd(li.begin(), li.end());
for (double d : vd) {
cout << d << " ";
}
cout << endl;
return 0;
}
```
从一个 `vector<int>` 创建一个 `vector<double>`,也可以通过 `vector` 的构造函数来实现,代码如下:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vi {1, 2, 3, 4, 5};
vector<double> vd(vi.begin(), vi.end());
for (double d : vd) {
cout << d << " ";
}
cout << endl;
return 0;
}
```
以上两段代码都会输出 `1 2 3 4 5`,即成功将 `list<int>` 和 `vector<int>` 转换成了 `vector<double>`。
请重新编写上述代码,在满足原题的基础上同时满足下列要求:Main函数内实现大致如下(以int型为例): main(){ int num;//每种数据类型测试数据的个数 cin>>num; Array<int> array_int(num);//初始化数组 cin>>array_int;//调用重载输入运算符输入数据 array_int.sort();//按要求对数组内数据排序 cout<<array_int<<endl;//调用重载输出运算符输出数据 } 要求重载输入和输出运算符,实现对数组内数据的输入和输出,并设计成员函数sort(),当数组内数据是int,double型时,按照从小到大的顺序对数组数据进行排序并输出结果;当数组内数据是char型时,按照ASCII码从小到大的顺序排序并输出结果;当数组内数据为Student类型时,按照成绩(没有重复值)从小到大的顺序,输出排序后的学生学号。
以下是满足要求的代码:
```cpp
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
class Student{
public:
int id;
double grade;
bool operator<(const Student& s) const{
return grade<s.grade;
}
};
template<typename T>
class Array{
private:
vector<T> data;
public:
Array(int n){
data.resize(n);
}
void sort(){
std::sort(data.begin(), data.end());
}
friend istream& operator>>(istream& in, Array& a){
for(int i=0;i<a.data.size();i++){
in>>a.data[i];
}
return in;
}
friend ostream& operator<<(ostream& out, const Array& a){
for(int i=0;i<a.data.size();i++){
out<<a.data[i]<<" ";
}
return out;
}
};
template<>
class Array<char>{
private:
vector<char> data;
public:
Array(int n){
data.resize(n);
}
void sort(){
std::sort(data.begin(), data.end());
}
friend istream& operator>>(istream& in, Array& a){
for(int i=0;i<a.data.size();i++){
in>>a.data[i];
}
return in;
}
friend ostream& operator<<(ostream& out, const Array& a){
for(int i=0;i<a.data.size();i++){
out<<a.data[i]<<" ";
}
return out;
}
};
template<>
class Array<Student>{
private:
vector<Student> data;
public:
Array(int n){
data.resize(n);
}
void sort(){
std::sort(data.begin(), data.end());
}
friend istream& operator>>(istream& in, Array& a){
for(int i=0;i<a.data.size();i++){
in>>a.data[i].id>>a.data[i].grade;
}
return in;
}
friend ostream& operator<<(ostream& out, const Array& a){
vector<int> id_list;
for(int i=0;i<a.data.size();i++){
id_list.push_back(a.data[i].id);
}
sort(id_list.begin(), id_list.end());
for(int i=0;i<id_list.size();i++){
for(int j=0;j<a.data.size();j++){
if(a.data[j].id==id_list[i]){
out<<a.data[j].id<<" "<<a.data[j].grade<<" ";
break;
}
}
}
return out;
}
};
int main(){
int num;
cin>>num;
Array<int> array_int(num);
cin>>array_int;
array_int.sort();
cout<<array_int<<endl;
Array<char> array_char(num);
cin>>array_char;
array_char.sort();
cout<<array_char<<endl;
Array<Student> array_student(num);
cin>>array_student;
array_student.sort();
cout<<array_student<<endl;
return 0;
}
```
在这个程序中,我们使用了模板类Array,它可以接受不同类型的数据并实现输入、输出和排序功能。对于不同类型的数据,我们需要特化Array模板类。对于int、double和char类型的数据,我们可以直接使用STL中的sort函数进行排序;对于Student类型的数据,我们需要重载小于运算符,按照成绩从小到大排序,并输出排序后的学生学号。最后,在main函数中,我们按照题目要求输入数据,排序并输出结果。
阅读全文