WD—C++课前作业—30题

怎么会手和脚都在桌子上

目录

31,声明一个类 String,其数据成员为 char head[100],构造函数 String(char*Head)实现 head 的初始化,成员函数 void reverse()实现 head 内字符串的逆序存放,成员函数 void print()实现 head 内字符串的输出。

32.定义盒子 Box类,要求具有以下成员:可设置盒子形状;可计算盒子体积;可计算盒子的表面积。

33.声明一个 Tree(树)类,有成员 ages(树龄),成员函数grow(int years)用以对 ages 加上 years,showAge()用以显示 tree 对象的 ages 值。在主函数中定义 Tree 类对象,并调用成员函数(自行指定实参数据)

34.有一个学生类 Student,包括学生姓名、成绩,设计一个友元函数,输出成绩对应的等级:(1)大于等于 90:优;(2)80~90:良;(3)70~79:中;(4)60~69:及格;(5)小于 60:不及格。

35.定义一个复数类,用友元函数实现对双目运算符“+”的运算符重载,使其适用于复数运算。

36.有一个 Time 类,包含数据成员 minute(分)和 sec(秒),模拟秒表,每次走一秒,满 60 秒进一分钟,此时秒又从0开始算。要求输出分和秒的值。(提示:重载单目运算符++)

37.设计一个三角形类 Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,以实现求两个三角形对象的面积之和。

38.使用函数重载的方法定义两个重名函数,分别求出整型数的两数之和和浮点数的两数之和,并在主函数中调用。

39.定义一个抽象类 Shape 用以计算面积,从中派生出计算长方形、梯形、圆形面积的派生类。程序中通过基类指针来调用派生类中的虚函数,计算不同形状的面积。

40.定义计数器类 Counter。要求具有以下成员:计数器值;可进行增值和减值记数;可提供记数值。

41.声明一个哺乳动物 Mammal 类,再由此派生出狗 Dog类,二者都定义 speak(成员函数,基类中定义为虚函数。声明一个 Dog类的对象,调用 speak()函数,观察运行结果。

42.编写一个程序计算“三角形、正方形、圆形”三种图形的面积,要求  :a)抽象出一个基类 Base;  b)在其中说明一个虚函数用来求面积;   c)利用派生类定义“三角形、正方形、圆形”;  编写主函数并测试。

C++字符串(std::string)、STL(标准模板库)相关;(这一部分的作业,请参考 C++ Primer5 的练习)

43.编写一段程序,从标准输入中一次读入一整行,存入 std::string 中,然后修改该程序,使其一次读入一个词。(练习3.2)

44.请说明std::string类的输入运算符和 getline函数分别是如何处理空白字符的。(练习3.3)

45.编写一段程序从标准输入中读入多个字符串并将它们连接在一起,输出连接成的大字符串。然后修改上述程序,用空格把输入的多个字符串分隔开来。(练习 3.5)

46.编写一段程序,读入一个包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分。(练习 3. 10)

47.编写一段程序,创建一个含有 10 个整数的 vector 对象,然后使用迭代器将所有元素的值都变成原来的两倍。输出 vector 对象的内容,检验程序是否正确。(练习 3.23)

48.编写一段程序,比较两个 std::string 对象。再编写一段程序,比较两个C风格字符串的内容。(练习3.39)

49.对于下面的程序任务,vector、deque 和 list 哪种容器最为合适?解释你的选择的理由。如果没有哪一种容器优于其他容器,也请解释理由。(练习9.1)(1)读取固定数量的单词,将他们按字典序插入到容器中。(2)读取未知数量的单词,总是将新单词插入到末尾。删除操作在头部进行。(3)从一个文件读取未知数量的整数。将这些数排序,然后将他们打印到标准输出。

50.对6种创建和初始化 vector 对象的方法,每一种都给出一个实例。解释每个 vector 包含什么值。(练习9.11)

51.如何从一个 list初始化一个 vector?从一个 vector又该如何创建?编写代码验证你的答案。(练习9.13)

52.编程程序,将一个 1ist 中的 char*指针(指向C风格字符串)元素赋值给-个vector中的string。(练习9.14) 

53,编写程序,从标准输入读取 string 序列,存入一个 deque 中。编写一个循环,用迭代器打印 deque 中的元素。(练习 9.18)

54.编写程序,从一个 1ist拷贝元素到两个 deque 中,其中值为偶数的所有元素都拷贝到一个 deque 中,而奇数元素都拷贝到另一个 deque 中。(9.20)

​编辑55,假定你希望每次读取一个字符存入一个 std::string 中,而且知道最少需要读取 100个字符,应该如何提高程序的性能?(9.42)

​编辑56.编写一个函数,接受一个表示名字的 std::string 参数和两个分别表示前缀(如“Mr.”或“Ms.”)和后缀(如“Jr.”“III”)的字符串。使用迭代器及insert 和 append 函数将前缀和后缀加到给定的名字中,生成新的 string 并返回。(9.45)

57.定义一个 map,关键字是家庭的姓,值是一个 vector,保存家中孩子(们)的名。编写代码,实现添加新的家庭以及向已有家庭中添加新的孩子。(11.7)

0.1  bug,只有第一个添加人的函数能进入循环

​编辑​编辑0.2 正常的

58,编写一个程序,在一个 vector 而不是一个 set 中保存不重复的单词。使用set的优点是什么?(练习 11.8)

59.可以用什么类型来对一个 map 进行下标操作?下标运算符返回的类型时什么?请给出一个具体例子,即定义一个 map,然后写出一个可以用来对 map 进行下标操作的类型以及下标运算符将会返回的类型。(11.26)

60.用冒泡法对 10 个整数排序。(用 STL 的 vector 容器实现)​​​​​​​

31,声明一个类 String,其数据成员为 char head[100],构造函数 String(char*Head)实现 head 的初始化,成员函数 void reverse()实现 head 内字符串的逆序存放,成员函数 void print()实现 head 内字符串的输出。
#include <iostream>
#include <cstring>
using namespace std;
/*
声明一个类 String,其数据成员为 char head[100]
构造函数 String(char*Head)实现 head 的初始化
成员函数 void reverse()实现 head 内字符串的逆序存放
成员函数 void print()实现 head 内字符串的输出。
*/
class String {
public:String(char* Head) {strcpy_s(head, sizeof(head), Head);}void reverse() {int len = strlen(head);for (int i = 0; i < len / 2; i++) {char temp = head[i];head[i] = head[len - i - 1];head[len - i - 1] = temp;}}void print() {cout << head << endl;}char head[100];
};
void test01() {String s(const_cast<char*>("hallo,world"));s.print();s.reverse();s.print();
}
int main() {test01();system("pause");return 0;
}

BUG:在你的代码中,test01 函数中创建 String 对象时,实参类型是 const char* 类型,但是构造函数参数类型是 char*,导致类型不匹配的错误。为了解决这个问题,你可以将构造函数的参数类型改为 const char*,或者在调用构造函数时将实参的类型转换为 char* 

32.定义盒子 Box类,要求具有以下成员:可设置盒子形状;可计算盒子体积;可计算盒子的表面积。
#include <iostream>
#include <string>
using namespace std;
class BOX {
public:BOX(int l,int w,int h) {m_l = l; m_w = w; m_h = h;}int gets() {return  m_l *m_w *m_h;}int getv() {return 2 * (m_l * m_w + m_l * m_h + m_w * m_h);}void shape() {cout << "BOX的长,宽,高分别为:" << m_l << " " << m_w << " " << m_h << endl;}int m_l;int m_w;int m_h;
};
void test01() {BOX b1(3, 4, 5);b1.shape();cout << "体积是:" << b1.getv() << endl;cout << "面积是:" << b1.gets() << endl;
}
int main() {test01();system("pause");return 0;
}

33.声明一个 Tree(树)类,有成员 ages(树龄),成员函数grow(int years)用以对 ages 加上 years,showAge()用以显示 tree 对象的 ages 值。在主函数中定义 Tree 类对象,并调用成员函数(自行指定实参数据)
#include <iostream>
#include <string>
using namespace std;
/*
* 声明一个 Tree(树)类,有成员 ages(树龄)
成员函数grow(int years)用以对 ages 加上 years
showAge()用以显示 tree 对象的 ages 值
在主函数中定义 Tree 类对象,并调用成员函数(自行指定实参数据)
*/
class Tree {
public:Tree() {ages = 0;}Tree(int age) {this->ages = age;}void grow(int years) {this->ages += years;}void showAge() {cout << "树的年龄为:" << ages << endl;}int ages;
};
void test01() {Tree t1(78);t1.showAge();t1.grow(200);t1.showAge();
}
int main() {test01();system("pause");return 0;
}

34.有一个学生类 Student,包括学生姓名、成绩,设计一个友元函数,输出成绩对应的等级:
(1)大于等于 90:优;(2)80~90:良;(3)70~79:中;(4)60~69:及格;(5)小于 60:不及格。
#include <iostream>
#include <ctime>
using namespace std;
/*
有一个学生类 Student,包括学生姓名、成绩,设计一个友元函数,输出成绩对应的等级:
(1)大于等于 90:优;(2)80~90:良;(3)70~79:中;(4)60~69:及格;(5)小于 60:不及格。
*/
class Student {friend void classgrade(Student& s);
public:Student(string name, int sc) {n_name = name;n_score = sc;}void show() {cout << "姓名:" << n_name << "\t成绩:" << n_score << "\t等级:";}
private:string n_name;int n_score;
};
void classgrade(Student& s) {int sco = s.n_score / 10;switch (sco) {case 10:cout << "优" << endl; break;case 9:cout << "优" << endl; break;case 8:cout << "良" << endl; break;case 7:cout << "中" << endl; break;case 6:cout << "及格" << endl; break;default:cout << "不及格" << endl; break;}
}
void test01() {srand((unsigned int)time(NULL));Student s1("栋栋",rand()%51+50);s1.show();classgrade(s1);
}
int main() {test01();system("pause");return 0;
}

35.定义一个复数类,用友元函数实现对双目运算符“+”的运算符重载,使其适用于复数运算。
#include <iostream>
#include <ctime>
using namespace std;
/*
.定义一个复数类,用友元函数实现对双目运算符“+”的运算符重载,使其适用于复数运算。
*/
class Complex {friend Complex& operator+(Complex& c1, Complex& c2);
public:Complex(int a1, int b1) {_a = a1;_b = b1;}void show() {cout << _a << "+" << _b << "i" << endl;}
private:int _a;int _b;
};
Complex& operator+(Complex& c1, Complex& c2) {Complex c(c1._a + c2._a, c1._b + c2._b);return c;
}
void test01() {Complex c1(3, 5);Complex c2(7, 4);Complex c3 = c1 + c2;c2.show();c1.show();c3.show();
}
int main() {test01();system("pause");return 0;
}

36.有一个 Time 类,包含数据成员 minute(分)和 sec(秒),模拟秒表,每次走一秒,满 60 秒进一分钟,此时秒又从0开始算。要求输出分和秒的值。(提示:重载单目运算符++)
#include <iostream>
#include <ctime>
using namespace std;
/*
有一个 Time 类,包含数据成员 minute(分)和 sec(秒)
模拟秒表,每次走一秒,满 60 秒进一分钟,此时秒又从0开始算。
要求输出分和秒的值。(提示:重载单目运算符++)
*/
class Time {
public:Time(int min,int sce) {_min = min;_sec = sce;}void showt() {cout << _min << " minute\t" << _sec <<" second" << endl;}Time& operator++() {//前置_sec++;if (_sec == 60) {_min++;_sec = 0;}return *this;}Time operator++(int) {//后置Time t(this->_min, this->_sec);_sec++;if (_sec == 60) {_min++;_sec = 0;}return t;}
private:int _min;int _sec;
};void test01() {Time t1(3, 59);t1.showt();(t1++).showt();t1.showt();(++t1).showt();t1.showt();
}
int main() {test01();system("pause");return 0;
}

37.设计一个三角形类 Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,以实现求两个三角形对象的面积之和。
#include <iostream>
using namespace std;
/*
设计一个三角形类 Triangle,包含三角形三条边长的私有数据成员
另有一个重载运算符“+”,以实现求两个三角形对象的面积之和。
*/
class Triangle {
public:Triangle() {_a = _b = _c = 0;}bool ist(int a, int b, int c) {return a < (b + c) && b < (a + c) && c < (a + b);}Triangle(int a, int b, int c) {if (ist(a,b,c)) {_a = a;_b = b; _c = c;}else {cout << "no no no" << endl;}}void showt() {cout << this->_a << " " << this->_b << " " << this->_c << endl;}double ss() {double d = (_a + _b + _c) / 2;double s = sqrt(d*(d - _a)*(d - _b)*(d - _c));return s;}double operator+(Triangle &b) {return this->ss() + b.ss();}
private:int _a;int _c;int _b;
};void test01() {Triangle t1(60,57,60);Triangle t2(3, 4, 5);t1.showt();t2.showt();cout << "t1:s:" << t1.ss() << endl;cout << "t2:s:" << t2.ss() << endl;cout << "t1+t2:s:" << t1+t2 << endl;
}
int main() {test01();system("pause");return 0;
}

38.使用函数重载的方法定义两个重名函数,分别求出整型数的两数之和和浮点数的两数之和,并在主函数中调用。
#include<iostream>
#include<string>
using namespace std;
/*
使用函数重载的方法定义两个重名函数,分别求出整型数的两数之和和浮点数的两数之和,并在主函数中调用。
*/
void plus01(int a,int b=10) {cout << a + b << endl;
}
void plus01(double a, int b=10) {cout << a + b << endl;
}
int main() {int a = 8; plus01(a);double i = 90.998;plus01(i);return 0;
}

39.定义一个抽象类 Shape 用以计算面积,从中派生出计算长方形、梯形、圆形面积的派生类。程序中通过基类指针来调用派生类中的虚函数,计算不同形状的面积。
#include<iostream>
#include<string>
using namespace std;
#define PAI 3.14159
/*
39.定义一个抽象类 Shape 用以计算面积,从中派生出计算长方形、梯形、圆形面积的派生类。
程序中通过基类指针来调用派生类中的虚函数,计算不同形状的面积。
*/
class shape {
public:virtual void getshape() {};
};
class rectangle :public shape {
public:rectangle(int l,int h) {this->_l = l; this->_h = h;}void getshape() {cout << "rectangle shape :" << endl;int shape = this->_l * this->_h;cout <<shape<< endl;}
public:int _l;int _h;
};
class trapezoid :public shape {
public:trapezoid(int ul,int dl,int uh) {this->_upl = ul; this->_downl = dl; this->_uph = uh;}void getshape() {cout << "trapezoid shape :" << endl;double shape = (this->_upl / 2.0 + this->_downl / 2.0) * this->_uph;cout << shape << endl;}
public:int _upl;int _downl;int _uph;
};
class circle :public shape {
public:circle(int r) {this->_r = r;}void getshape() {cout << "circle shape :" << endl;double shape = this->_r * this->_r * PAI;cout << shape << endl;}
public:int _r;
};
void test01() {rectangle t(5, 6);t.getshape();trapezoid tr(3, 5, 6);tr.getshape();circle c(5);c.getshape();
}
int main() {test01();return 0;
}

​​​​​​​

40.定义计数器类 Counter。要求具有以下成员:计数器值;可进行增值和减值记数;可提供记数值。
#include<iostream>
#include<string>
using namespace std;
#define PAI 3.14159
/*
40.定义计数器类 Counter。要求具有以下
成员:计数器值;
可进行增值和减值记数;可提供记数值。
*/
class Counter {
public:Counter(int a) {this->_count = a;}Counter& operator++() {//前置this->_count++;return *this;}Counter operator++(int) {//hou_zhiCounter p = *this;this->_count++;return p;}void getcount(int a) {cout << "begin count = " << this->_count << endl;system("pause");for (int i =0; i <= a; i++) {_count++;cout << this->_count << " ";system("cls");}cout << endl << "after count = " <<this->_count<< endl;}
public:int _count;
};
void test01() {Counter c(0);c.getcount(67);cout << (++c)._count << endl;cout << (c++)._count << endl;cout << (c)._count << endl;
}
int main() {test01();return 0;
}

41.声明一个哺乳动物 Mammal 类,再由此派生出狗 Dog类,二者都定义 speak(成员函数,基类中定义为虚函数。声明一个 Dog类的对象,调用 speak()函数,观察运行结果。
#include<iostream>
#include<string>
using namespace std;
#define PAI 3.14159
/*
41.声明一个哺乳动物 Mammal 类,再由此派生出狗 Dog类,二者都定义 speak(成员函数,
基类中定义为虚函数。声明一个 Dog类的对象,调用 speak()函数,观察运行结果。
*/
class Mammal {
public:virtual void speak() {};
};
class dog :public Mammal {
public:void speak() {cout << " wang wang wang " << endl;}
};
void test01() {dog facai;facai.speak();
}
int main() {test01();return 0;
}
42.编写一个程序计算“三角形、正方形、圆形”三种图形的面积,要求  :a)抽象出一个基类 Base;  b)在其中说明一个虚函数用来求面积;   c)利用派生类定义“三角形、正方形、圆形”;  编写主函数并测试。
#include<iostream>
#include<string>
using namespace std;
#define PAI 3.14159
/*
42.编写一个程序计算“三角形、正方形、圆形”三种图形的面积,要求  :
a)抽象出一个基类 Base;  
b)在其中说明一个虚函数用来求面积;  
c)利用派生类定义“三角形、正方形、圆形”;  编写主函数并测试。
*/
class shape {
public:virtual void getshape() {};
};
class square :public shape {
public:square(int l) {this->_l = l; }void getshape() {cout << "square shape :" << endl;int shape = this->_l * this->_l;cout << shape << endl;}
public:int _l;
};
class triangle :public shape {
public:triangle(int ul, int dl, int uh) {this->_a = ul; this->_b = dl; this->_c = uh;}void getshape() {cout << "triangle shape :" << endl;double s = (_a + _b + _c) / 2.0;double shape = sqrt(s*(s-_a)*(s-_b)*(s-_c));cout << shape << endl;}
public:int _a;int _b;int _c;
};
class circle :public shape {
public:circle(int r) {this->_r = r;}void getshape() {cout << "circle shape :" << endl;double shape = this->_r * this->_r * PAI;cout << shape << endl;}
public:int _r;
};
void test01() {square t(5);t.getshape();triangle tr(4, 5, 3);tr.getshape();circle c(5);c.getshape();
}
int main() {test01();return 0;
}

C++字符串(std::string)、STL(标准模板库)相关;(这一部分的作业,请参考 C++ Primer5 的练习)

43.编写一段程序,从标准输入中一次读入一整行,存入 std::string 中,然后修改该程序,使其一次读入一个词。(练习3.2)
#include<iostream>
#include<string>
using namespace std;
#define PAI 3.14159
/*
43.编写一段程序,从标准输入中一次读入一整行,存入 std::string 中,
然后修改该程序,使其一次读入一个词。(练习3.2)
*/void test01() {cout << " one word once :___" << endl;string c;cin >> c;cout << c << endl;//string读到空格停止读入
}
void test02() {cout << " one line once:___" << endl;string line;while (getline(cin, line)) {//getline(is,s)从is中读取一行赋给S[包括空格],返回iscout << line << endl;}
}
int main() {test01();test02();return 0;
}
44.请说明std::string类的输入运算符和 getline函数分别是如何处理空白字符的。(练习3.3)

输入运算符 :逐字读取,行编辑,只保留第一串不含空白字符的连续字符;
getline :逐字读取,行编辑,全保留/换行符不存贮到字符串中

#include<iostream>
#include<string>
using namespace std;
#define PAI 3.14159
/*
44.请说明std::string类的输入运算符和 
getline函数分别是如何处理空白字符的。(练习3.3)
*/void test01() {cout << " one word once :___" << endl;string c;cin >> c;cout << c << endl;
}
void test02() {cout << " one line once:___" << endl;string line;while (getline(cin, line)) {cout << line << endl;}
}
int main() {test01();test02();return 0;
}

45.编写一段程序从标准输入中读入多个字符串并将它们连接在一起,输出连接成的大字符串。然后修改上述程序,用空格把输入的多个字符串分隔开来。(练习 3.5)
#include<iostream>
#include<string>
using namespace std;
#define PAI 3.14159
/*
45.编写一段程序从标准输入中读入多个字符串并将它们连接在一起,输出连接成的大字符串。
然后修改上述程序,用空格把输入的多个字符串分隔开来。(练习 3.5)
*/void test01() {string word;while (cin>>word) {cout << word;}
}
void test02() {string word;while (cin >> word) {cout << word<<" ";}
}
int main() {//test01();test02();return 0;
}

46.编写一段程序,读入一个包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分。(练习 3. 10)
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
/*
46.编写一段程序,读入一个包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分。(练习 3. 10)
*/void test02() {string line;while (getline(cin, line)) {for (auto c:line) {if (!ispunct(c)) {cout << c;}}}
}
int main() {test02();return 0;
}
47.编写一段程序,创建一个含有 10 个整数的 vector 对象,然后使用迭代器将所有元素的值都变成原来的两倍。输出 vector 对象的内容,检验程序是否正确。(练习 3.23)
#include<iostream>
#include<string>
#include<vector>
using namespace std;
/*
47.编写一段程序,创建一个含有 10 个整数的 vector 对象,
然后使用迭代器将所有元素的值都变成原来的两倍。
输出 vector 对象的内容,检验程序是否正确。(练习 3.23)
*/
void print01(vector<int> &v) {for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {//*it *= 2;cout << *it << " ";}cout << endl;
}
void test02() {vector<int> v;for (int i = 0; i < 10; i++)v.push_back(i);print01(v);for (int i = 0; i < 10; i++)v[i]*=2;print01(v);
}
int main() {test02();return 0;
}
48.编写一段程序,比较两个 std::string 对象。再编写一段程序,比较两个C风格字符串的内容。(练习3.39)
#include<iostream>
#include<string>
#include<vector>
using namespace std;
/*
48.编写一段程序,比较两个 std::string 对象。再编写一段程序,比较两个C风格字符串的内容。(练习3.39)
*/
void bigorsmall(string s1,string s2) {if (s1.compare(s2) == 0) {cout << s1<<" == "<<s2 << endl;}else if (s1.compare(s2) < 0) {cout << s1 << " > " << s2 << endl;}else if (s1.compare(s2) > 0) {cout << s1 << " < " << s2 << endl;}
}
void test02() {string s1 = "dsewfaewg";string s2 = "dsewfaewg";bigorsmall(s1, s2);const char* v1 = "nihao";const char* v2 = "aihao";bigorsmall(v1, v2);
}
int main() {test02();return 0;
}

49.对于下面的程序任务,vector、deque 和 list 哪种容器最为合适?解释你的选择的理由。如果没有哪一种容器优于其他容器,也请解释理由。(练习9.1)
(1)读取固定数量的单词,将他们按字典序插入到容器中。
(2)读取未知数量的单词,总是将新单词插入到末尾。删除操作在头部进行。
(3)从一个文件读取未知数量的整数。将这些数排序,然后将他们打印到标准输出。
/*
(1)LIST可以对任意位置进行快速插入或删除元素,操作方便,修改指针即可,不需要移动大量元素,LIST合适,
也可以每次尾部插入之后用排序算法重新排序,VECTOR合适
(2)固定头部删除,尾部插入,DEQUE更合适
(3)排序需要遍历元素,VECTOR访问元素的速度快于DEQUE,LIST,VECTOR合适
*/
50.对6种创建和初始化 vector 对象的方法,每一种都给出一个实例。解释每个 vector 包含什么值。(练习9.11)
#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<list>
using namespace std;
/*
50.对6种创建和初始化 vector 对象的方法,每一种都给出一个实例。解释每个 vector 包含什么值。(练习9.11)
*/
void myprint(vector<int>& v) {for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}
void test02() {vector<int> v1;     //vector<T> v; for (int i = 0; i < 5; i++) {v1.push_back(i);}vector<int> v2(v1.begin(), v1.end());   //vector(v.begin(),v.end());vector<int> v3(15,1);   //vector(n,elem); vector<int> v4(v3);   //vector(const vector &vec); vector<int> v5;   //operator= v5 = v1;vector<int> v6;   //assign(n,elem)v6.assign(20, 0);   vector<int> v7;  //assign(beg,end)v7.assign(v3.begin(), v3.end());myprint(v1);myprint(v2);myprint(v3);myprint(v4);myprint(v5);myprint(v6);myprint(v7);
}
int main() {test02();return 0;
}

51.如何从一个 list<int>初始化一个 vector<double>?从一个 vector<int>又该如何创建?编写代码验证你的答案。(练习9.13)
#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<list>
using namespace std;
/*
51.如何从一个 list<int>初始化一个 vector<double>?
从一个 vector<int>又该如何创建?编写代码验证你的答案。(练习9.13)
*/
void myprint(vector<double>& v) {for (vector<double>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}
void test02() {list<int>l(5, 6);vector<double>v0(l.begin(), l.end());vector<int> v1(10,1);vector<double>v2(v1.begin(),v1.end());myprint(v0);myprint(v2);
}
int main() {test02();return 0;
}

52.编程程序,将一个 1ist 中的 char*指针(指向C风格字符串)元素赋值给-个vector中的string。(练习9.14) 
#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<list>
using namespace std;
/*
52.编程程序,将一个 1ist 中的 char*指针(指向C风格字符串)元素
赋值给-个vector中的string。(练习9.14) 
*/
void myprint(vector<string>& v) {for (vector<string>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}
void test02() {list<const char*>l = { "cc","ii","ee"};vector<string>v0(l.begin(), l.end());myprint(v0);
}
int main() {test02();return 0;
}
​​​​​​​
53,编写程序,从标准输入读取 string 序列,存入一个 deque 中。编写一个循环,用迭代器打印 deque 中的元素。(练习 9.18)
#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<list>
using namespace std;
/*
53,编写程序,从标准输入读取 string 序列,存入一个 deque 中。
编写一个循环,用迭代器打印 deque 中的元素。(练习 9.18)
*/
void myprint(deque<string>& v) {for (deque<string>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}
void test02() {deque<string>v0;string word;while (cin >> word) {v0.push_back(word);}myprint(v0);
}
int main() {test02();return 0;
}
54.编写程序,从一个 1ist<int>拷贝元素到两个 deque 中,其中值为偶数的所有元素都拷贝到一个 deque 中,而奇数元素都拷贝到另一个 deque 中。(9.20)
#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<list>
using namespace std;
/*
54.编写程序,从一个 1ist<int>拷贝元素到两个 deque 中,其中值为偶数的所有元素
都拷贝到一个 deque 中,而奇数元素都拷贝到另一个 deque 中。(9.20)
*/
void myprint(deque<int>& v) {for (deque<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}
void test02() {deque<int> odd_number;deque<int> even_number;list<int> l;for (int i = 0; i < 101; i++) {l.push_back(i);}for (auto it = l.begin(); it != l.end(); it++) {if (*it % 2 == 0) {even_number.push_back(*it);}else {odd_number.push_back(*it);}}cout << " odd_number" << endl;myprint(odd_number);cout << " even_number" << endl;myprint(even_number);
}
int main() {test02();return 0;
}
55,假定你希望每次读取一个字符存入一个 std::string 中,而且知道最少需要读取 100个字符,应该如何提高程序的性能?(9.42)
#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<list>
using namespace std;
/*
55,假定你希望每次读取一个字符存入一个 std::string 中,而且知道最少需要
读取 100个字符,应该如何提高程序的性能?(9.42)
1.使用 reserve:在读取字符前,调用 reserve 函数来预留足够的内存空间,以减少动态内存分配的次数
2.使用移动语义:当将读取的字符添加到 std::string 中时,使用移动语义而不是复制语义,可以避免不必要的内存复制。
*/void test02() {string str;str.reserve(100);//提前开辟空间cout << str.capacity() << endl;char c;/*while ((c = getchar()) != EOF) {str.push_back(c);}*/while (cin.get(c)) {str.push_back(move(c));//使用移位字符}cout << str << endl;
}
int main() {test02();return 0;
}
56.编写一个函数,接受一个表示名字的 std::string 参数和两个分别表示前缀(如“Mr.”或“Ms.”)和后缀(如“Jr.”“III”)的字符串。使用迭代器及insert 和 append 函数将前缀和后缀加到给定的名字中,生成新的 string 并返回。(9.45)
#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<list>
using namespace std;
/*
56.编写一个函数,接受一个表示名字的 std::string 参数和两个分别表示前缀(如“Mr.”或“Ms.”)和后缀(如“Jr.”“III”)的字符串。
使用迭代器及insert 和 append 函数将前缀和后缀加到给定的名字中,生成新的 string 并返回。(9.45)
*/void test02() {string str="魏国";string prefix = "Mr.";string prefix2 = "Ms.";string suffix = "Jr.III";cout << str << endl;str.append(suffix,0,3);cout << str << endl;str.append(suffix, 3, 3);cout << str << endl;str.insert(0, prefix);cout << str << endl;str.insert(0, prefix2);cout << str << endl;
}
int main() {test02();return 0;
}
57.定义一个 map,关键字是家庭的姓,值是一个 vector,保存家中孩子(们)的名。编写代码,实现添加新的家庭以及向已有家庭中添加新的孩子。(11.7)
0.1  bug,只有第一个添加人的函数能进入循环
#include<iostream>
#include<string>
#include<vector>
#include<map>
using namespace std;
/*
57.定义一个 map,关键字是家庭的姓,值是一个 vector,保存家中孩子(们)的名。
编写代码,实现添加新的家庭以及向已有家庭中添加新的孩子。(11.7)
*/
void addchild(map<string, vector<string>>&fam) {string ff, child;cout << " addchild : enter family,child" << endl;while(cin>>ff&&cin>>child){fam[ff].push_back(child);}
}
void addfamily(map<string, vector<string>> &fam) {cout << " addfamily:enter family" << endl;string ff;while (cin >> ff) {fam[ff];}
}
void show(map<string,vector<string>> &fam) {cout << "show family and children" << endl;for (auto a : fam) {cout << a.first << ":\t" << endl;for (auto b : a.second) {cout << b << " ";}cout << endl;}
}
void test02() {map<string, vector<string>> fam;addchild(fam);addfamily(fam);//bug,只有第一个添加人的函数能进入循环show(fam);
}
int main() {test02();return 0;
}
0.2 正常的
#include<iostream>
#include<string>
#include<vector>
#include<map>
using namespace std;
/*
57.定义一个 map,关键字是家庭的姓,值是一个 vector,保存家中孩子(们)的名。
编写代码,实现添加新的家庭以及向已有家庭中添加新的孩子。(11.7)
*/
void addchild(map<string, vector<string>>&fam, const string &ff, const string &child) {fam[ff].push_back(child);
}
void addfamily(map<string, vector<string>> &fam,const string &ff) {fam[ff];
}
void show(map<string,vector<string>> &fam) {cout << "show family and children" << endl;for (auto a : fam) {cout << a.first << ":\t" ;for (auto b : a.second) {cout << b << " ";}cout << endl;}cout << endl;
}
void test02() {map<string, vector<string>> fam;addchild(fam,"huang","dsd");addchild(fam, "huang", "34523");addchild(fam, "chen", "dddq");addfamily(fam,"xu");addfamily(fam, "zhuge");show(fam);
}
int main() {test02();return 0;
}

58,编写一个程序,在一个 vector 而不是一个 set 中保存不重复的单词。使用set的优点是什么?(练习 11.8)
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
/*
58,编写一个程序,在一个 vector 而不是一个 set 中保存不重复的单词。使用set的优点是什么?(练习 11.8)
SET	会自动进行排序,且不允许重复元素出现
*/
void addVector(vector<string> &v,string a) {vector<string>::iterator isrepetition=find(v.begin(), v.end(), a);if (isrepetition == v.end()) {v.push_back(a);}
}
void show(vector<string>& v) {for (vector<string>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}
void test02() {vector<string> v;addVector(v, "hkhk");addVector(v, "23");addVector(v, "hkhk");show(v);
}
int main() {test02();return 0;
}
​​​​​​​
59.可以用什么类型来对一个 map 进行下标操作?下标运算符返回的类型时什么?请给出一个具体例子,即定义一个 map,然后写出一个可以用来对 map 进行下标操作的类型以及下标运算符将会返回的类型。(11.26)
#include<iostream>
#include<string>
#include<vector>
#include<map>
using namespace std;
/*
当对MAP进行下标操作时,会得到一个MAPPED_TYPE对象,解引用一个迭代器时,会得到一个VALUE_TYPE对象
STRING 和 VECTOR使用小标和解引用返回的数据类型相同
*/
void show(vector<int>& v) {for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}
void test02() {map<int, string> m;m.insert(make_pair(2, "dsfe"));cout <<" m[2]:\t" << m[2] << endl;map<int, string>::iterator it = m.begin();cout <<"*it:\t" << (*it).first << " " << (*it).second << endl;
}
int main() {test02();return 0;
}
60.用冒泡法对 10 个整数排序。(用 STL 的 vector 容器实现)
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
/*
60.用冒泡法对 10 个整数排序。(用 STL 的 vector 容器实现)
*/
void bubble(vector<int> &v) {for (int t= 0; t < v.size()-1; t++) {for (int i = 0; i < v.size() - 1 - t; i++) {if (v[i] > v[i + 1]) {v[i] += v[i + 1];v[i + 1] = v[i] - v[i + 1];v[i]= v[i] - v[i + 1];}}}
}
void show(vector<int>& v) {for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}
void test02() {srand(unsigned int(time(NULL)));vector<int> v;for (int i = 0; i < 10; i++) {int t = rand() % 100;v.push_back(t);}show(v);bubble(v);show(v);
}
int main() {test02();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/12527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01基础篇

1、初识 JVM 1.1 什么是 JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 Java源代码执行流程如下&#xff1a; 分为三个步骤&#xff1a; 编写Java源代码文件。使用…

Python轻量级Web框架Flask(14)—— 自己做Flask项目总结

0、前言&#xff1a; 本文意在记录自己在做毕业Flask项目开发时遇到的一些问题&#xff0c;并将问题解决方案记录下来&#xff0c;可做日后查询本文也会记录自己做FLask项目时实现的一些功能&#xff0c;作为开发工作的进程记录注意&#xff1a;用Flask开发的前提是已经设计好…

Java | Leetcode Java题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; class Solution {public List<Integer> grayCode(int n) {List<Integer> ret new ArrayList<Integer>();for (int i 0; i < 1 << n; i) {ret.add((i >> 1) ^ i);}return ret;} }

mongodb备份还原指南

MongoDB 提供的命令行实用程序mongodump和mongorestore创建备份和恢复数据的过程。 一、数据备份 mongorestore和mongodump实用程序可处理BSON数据转储&#xff0c;对于创建小型部署的备份非常有用。要实现弹性且无中断的备份&#xff0c;请将文件系统快照或区块级磁盘快照与…

串联所有单词的子串 ---- 滑动窗口

题目链接 题目: 分析: 我们上次做的题目, 是找到所有字符的异位词, 和这道题有些类似, 使用记录有效字符的个数找到子字符, 此题无非是把字符变成了字符串题目回顾 有一下几方面不同, 我们以示例1为例: 1. 哈希表 上次我们使用的是哈希数组, 因为数组的下标可以是字符, 现…

常类API(Math,System,Runtime)

1、Math 是帮助我们用于进行数学计算的工具类私有化构造方法&#xff0c;所有的方法都是静态的 方法名 说明public static int abs(int a) 获取参数绝对值 public static double ceil(int a)向上取整public static double floor(int a)向下取…

java项目之教学辅助平台(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的教学辅助平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 教学辅助平台的主要使用者分…

如何在 Ubuntu 12.10 上使用 Python 创建 Nagios 插件

介绍 Python 是一种在 Linux 上默认可用的流行命令处理器。 我们之前已经介绍过如何在 Ubuntu 12.10 x64 上安装 Nagios 监控服务器。 这一次&#xff0c;我们将扩展这个想法&#xff0c;使用 Python 创建 Nagios 插件。 这些插件将在客户 VPS 上运行&#xff0c;并通过 NR…

Java String转JSONObject时保持字段顺序不变

Java String转JSONObject时保持字段顺序不变 问题背景解决方案 问题背景 在业务接口开发过程中&#xff0c;有一个新增接口&#xff0c;需要支持批量新增数据&#xff0c;这时入参就需要用到 json 格式数据&#xff0c;且包含 list 集合&#xff0c;比如这样的数据格式&#x…

windows11 Django环境安装

相关文档 1、验证python和pip3环境 C:\Users\Administrator>python Python 3.12.3 (tags/v3.12.3:f6650f9, Apr 9 2024, 14:05:25) [MSC v.1938 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for…

基于yolov2深度学习网络的单人口罩佩戴检测和人脸定位算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ..............................................................I0 imresize…

QX----mini51单片机学习---(7)矩阵键盘

目录 1矩阵键盘的识别 2相关c语言 3实践编程 1矩阵键盘的识别 假设按列扫描按下S6P30&#xff1a;0P34&#xff1a;1然后高流向低&#xff0c;P34&#xff1a;0&#xff0c;刚开始是0xf0&#xff1a;1111 0000 后面是0xe0&#xff1a;1110 0000 &#xff0c;当是0xe0能确…

MySQL用SQL取三列中最大的数据值

1、有如下数据&#xff1a; ABC000097.0600330.72330.720069.650027.8827.85086.92086.92219.42219.4219.41 需要展示为如下形式&#xff1a; ABC结果列0000097.06097.060330.72330.72330.7200669.65009.6527.8827.85027.8886.92086.9286.92219.42219.4219.41219.42 解决办…

Spring Cloud系列—Spring Cloud Gateway服务网关的部署与使用指南

Gateway网关 文章目录 Gateway网关1. 网关基本简介1.1 什么是网关1.2 为什么需要网关&#xff1f; 2. 快速搭建gateway网关2.1 创建新模块2.2 引入依赖2.3 编写启动类2.4 配置路由规则2.5 测试 3. 路由过滤4. 过滤器4.1 简介4.2 网关过滤器4.2.2 种类 4.3 自定义过滤器4.3.1 自…

平衡三进制小数详解与进制转换

标准三进制是“逢三进一&#xff0c;退一还三”的机制&#xff0c;平衡三进制与之类似&#xff0c;但就是偏移了一下变得对称了&#xff0c;平衡三进制与标准三进制可以相互转换&#xff0c;但这样显得有点多余了&#xff0c;所以这里只讲平衡三进制与十进制的转换。 数字系统的…

数据结构与算法-排序算法3-插入排序

目录 1.插入排序&#xff1a; 1.介绍&#xff1a; 2.动态图解 3.举例 4.小结插入排序规则 5.插入排序代码 6.运行时间 代码&#xff1a; 运行结果&#xff1a; 1.插入排序&#xff1a; 1.介绍&#xff1a; 数组中n个元素&#xff0c;把这n个待排序元素看成一个有序序…

(Java面试题——基础版)JVM、JRE和JDK的关系

JVM Java Virtual Machine是Java虚拟机 &#xff0c;Java程序需要运行在虚拟机上 &#xff0c;不同的平台有自己的虚拟机 &#xff0c;因此Java语言可以 实现跨平台。JVM 负责将 Java 字节码&#xff08;即编译后的 .class 文件&#xff09;翻译成特定平台上的机器码&#xff0…

直播预告-如何快乐学习亚马逊云科技AWS,玩游戏备考亚马逊云科技云从业者认证?

一边玩一边学习亚马逊云科技云技能&#xff0c;这么好的事尊的假的&#xff1f;本周六&#xff08;5约11日&#xff09;晚20点&#xff0c;亚马逊云科技UG云端夜话Night Talk活动精彩回归&#xff5e; 本次亚马逊云科技UG云端夜话直播是什么&#xff1f; 小李哥这次将在多平台…

分析 vs2019 cpp20 规范的 STL 库模板 function ,源码注释并探讨几个问题

&#xff08;1 探讨一&#xff09;第一个尝试弄清的问题是父类模板与子类模板的模板参数的对应关系&#xff0c;如下图&#xff1a; 我们要弄清的问题是创建 function 对象时&#xff0c;传递的模板参数 _Fty , 传递到其父类 _Func_class 中时 &#xff0c;父类的模板参数 _Ret…

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

基础知识要求&#xff1a; Java&#xff1a;方法、while循环、for循环 Python&#xff1a; 方法、while循环、for循环 题目&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head […