实验楼课程管理程序-深入学习《C++ Primer第五版》实验报告&学习笔记1
本片博客为实验楼的训练营课程深入学习《C++ Primer第五版》的实验报告和学习笔记。
原课程地址为:https://www.shiyanlou.com/courses/405#
原文出处:http://www.cnblogs.com/jacklu/p/4793049.html

程序设计思路

实验结果:

源代码:
header.h
#pragma once
#include <iostream>
#include <string>
#include <vector> typedef struct course
{
int id;
string name;
}course; void printHelp();
void printCourseInfo(vector<course>);
void printHowMany(vector<course>);
void printTheLongest(vector<course>);
int deleteTheLast(vector<course>&);
source.cpp
#include "header.h"
using namespace std;
int main()
{
int cmd;
int i = 0;
vector<course> courses;
course courseTemp;
string names[] = { "Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python" };
for (string name : names) {
courseTemp.id = i;
courseTemp.name = name;
courses.push_back(courseTemp);
i++;
}
// cout << courses[0].name;
while (1) {
cout << '>';
cin >> cmd;
switch (cmd){
case 0:
printHelp();
break;
case 1:
printCourseInfo(courses);
break;
case 2:
printHowMany(courses);
break;
case 3:
printTheLongest(courses);
break;
case 4:
deleteTheLast(courses);
break;
case 5:
exit(0);
break;
default:
printHelp();
break;
}
}
} void printHelp()
{
cout << "<help>" << " " << '0' << endl;
cout << "<courseInfo>" << ' ' << '1' << endl;
cout << "<howMany>" << " " << '2' << endl;
cout << "<theLongest>" << ' ' << '3' << endl;
cout << "<theLast>" << " " << '4' << endl;
cout << "<exit>" << " " << '5' << endl;
}
void printCourseInfo(vector<course> courses)
{
for (auto it = courses.begin(); it != courses.end(); ++it) {
cout << it->id << ' ' << it->name << endl;
}
}
void printHowMany(vector<course> courses)
{
int nTemp = 0;
for (auto it = courses.begin(); it != courses.end(); ++it) {
nTemp++;
}
cout << "Total:" << nTemp << endl;
}
void printTheLongest(vector<course> courses)
{
unsigned int maxLength = 0;
if (courses.empty()) {
cout << "Empty" << endl;
return;
}
for (auto it = courses.begin(); it != courses.end(); it++) {
if (it->name.length() > maxLength) {
maxLength = it->name.length();
}
}
for (auto it = courses.begin(); it != courses.end(); it++) {
if (it->name.length() == maxLength) {
cout << it->id << ' ' << it->name << endl;
}
}
}
int deleteTheLast(vector<course> &courses)
{
string lastCourse;
if (courses.cbegin() == courses.cend()) {
cout << "Empty" << endl;
return 1;
}
else {
lastCourse = courses.at(courses.size() - 1).name;
courses.pop_back();
cout << "Deleted" << lastCourse << endl;
return 0;
}
}
以下为自己的学习笔记
第1周:C++基础入门(第1章至第3章)
第1章
main的返回值是一个状态指示器,返回0往往表示main函数成功执行完毕,返回其他值
第2章
用class与struct的唯一区别
在于class默认下成员为private,而struct默认下为public;
引用必须要初始化:
int &refval =ival;正确,refval是ival的另一个名字
int &refval;错误
第3章
3.1头文件不应包含using声明
因为include头文件的程序,可能不需要using,但是这个using声明可能会产生某种冲突;
3.2vector不是一种数据类型
而是一种类模板,而vector<int>、vector<string>才是数据类型;
3.3几种初始化vector的方式:
vector<T> v1; 保存类型为T对象,v1为空
vector<T> v2(v1);v2是v1的一个副本
vector<T> v3(n,i);v3包含n个值为i的元素
vector<T> v4(n);v4包括了n个初始化值,初始化值与T的类型相关
vector的重要特点就是可以高效的添加元素。不清楚元素确切个数,尽量使用vector。
3.4下标
vector对象的下标也是从0开始记起,下标的类型是相应的size_type类型。
注意,只能对已知存在的元素进行下标操作。
3.5迭代器
每种容器类型都有自己的迭代器,
vector<int>::iterator iter;
注意end操作返回最后一个元素的下一个位置。
迭代器可以使用解引用来访问一个元素
有了迭代器,就可以使用迭代器来编写循环:
for(vector<int>::iterator iter = ivec.begin(); iter!=ivec.end();++iter){}
这种方式的好处是,如果vector是空的,程序是安全的。
3.6使用迭代器可以快速访问某个位置的元素
vector<int>::iterator mid = vi.begin() + vi.size()/2;
这样比自增操作高效很多。
3.7任何改变 vector 长度的操作都会使已存在的迭代器失效。例 如,在调用 push_back 之后,就不能再信赖指向 vector 的迭代器的值了
vector实现时,会预先申请一段连续内存,不断push_back总会占满内存,占满后如果系统内存足够还会在原来的内存部分申请相同大小的内存,如果连续空间不足,则vector会在另一块大连续存储空间申请内存,此时迭代器会发生改变;一般PC机连续内存很大,这种情况一般不会发生,但是只要是不确定的就是不值得信赖的;vector预先申请的内存大小是capacity()
3.8字符数组的特殊性
const char a[6] = “Daniel”;错误,没有空间可以存放空字符
3.9多维数组
多维数组就是数组的数组;
int a[3][4];大小为3的数组,每个元素是含有4个整数的数组
参考资料:《C++ primer 第五版》
实验楼课程管理程序-深入学习《C++ Primer第五版》实验报告&学习笔记1的更多相关文章
- 第五周实验报告&学习总结
实验三 String类的应用 实验目的 掌握类String类的使用: 学会使用JDK帮助文档: 实验内容 1.已知字符串:"this is a test of java".按要求执 ...
- 第五次实验报告&学习总结
一.实验目的 (1) 理解抽象类与接口的使用; (2)了 解包的作用,掌握包的设计方法. 二.实验要求 (1)掌 握使用抽象类的方法. (2)掌 握使用系统接口的技术和创建自定义接口的方法. (3) ...
- C++ 11 从C++ primer第五版的学习笔记
1. auto (page107) auto 推断会忽略const const int ci = i, & cr = ci; auto b = ci; // b is an int (to ...
- C++PRIMER第五版练习题答案第一章
C++PRIMER第五版练习题答案第一章 应该有很多小伙伴和我一样,闲来无事买了本C++的书自己啃,课后的练习题做的很揪心,这里我分享下我写的答案,希望能帮助到你,提供源码,就不跑了哈,毕竟现在是第一 ...
- 学习人工智能的第五个月[字典学习[Dictionary Learning,DL]]
摘要: 大白话解释字典学习,分享第五个月的学习过程,人生感悟,最后是自问自答. 目录: 1.字典学习(Dictionary Learning,DL) 2.学习过程 3.自问自答 内容: 1.字典学习( ...
- 第一次实验报告&学习总结
实验报告一&学习总结 一.实验目的 熟悉JDK开发环境 熟练掌握结构化程序设计方法 二.实验内容 打印输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其中各位数字立方和等于该数本身.例 ...
- C++Primer第五版学习笔记
<C++ Primer>Learning Note 程序实例下载地址:http://www.informit.com/title/0321714113 第一章 开始 ...
- C++学习书籍推荐《C++ Primer 第五版 (英文)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <C++ Primer(英文版)(第5版)>是全球最畅销的C++图书.这本久负盛名的C++经典教程,时隔八年之久,终迎来的重大升级.除令全球无数程 ...
- C++Primer第五版——习题答案目录
目前正在刷<C++Primer>这本书,会在博客上记录课后习题答案,答案仅供参考. 因为水平有限,如有有误之处,希望大家不吝指教,谢谢! 目录地址 使用的系统为:win 10,编译器:VS ...
随机推荐
- java同一个类不同方法间的同步
对象的方法中一旦加入synchronized修饰,则任何时刻只能有一个线程访问synchronized修饰的方法.假设有个数据对象拥有写方法与读方法,多线程环境中要想保证数据的安全,需对该对象的读写方 ...
- 主工程中合并库工程的Manifest文件
修改project属性文件中的 manifestmerger.enabled=true,就可以实现Android Manifest的合并. 主要用于lib工程和主工程之间. eg: target=an ...
- day1作业--三级菜单
作业概述: 写一个三级菜单 实现如下功能: (1)可依次选择进入各子菜单 (2)在每一级按“b”都可以返回上一级,按“q"都可以退出 流程图: readme: 简介: three_menu. ...
- System.Data.EntityState”在未被引用的程序集中定义
类型“System.Data.EntityState”在未被引用的程序集中定义.必须添加对程序集“System.Data.Entity, Version=4.0.0.0, Culture=neu 错误 ...
- linux 出core设置问题
我所在的环境是RedHat 1.第一步 修改/etc/security/limits.conf添加一行 user为生效的用户 user hard core unlimited 2.第二步 在普通用户的 ...
- left join 取一条数据
产品生产过程中要记录产品在制作过程中的不良历史,即使在一个工序,也可以产生多条不良历史记录,所有的不良信息保存在B表中.假设产品在打包工序,存放打包工序成品参数记录的表A,数据是唯一的.但在打包过程中 ...
- js 鼠标滚动到某屏时,加载那一屏的数据,仿京东首页楼层异步加载模式
js用处:在做商城时,首页图片太多,严重影响首页打开速度,所以我们需要用到异步加载楼层.js名称:鼠标滚动到某屏时,加载那一屏的数据,仿京东首页楼层模式js解释:1.用于商城的楼层内容异步加载,滚动条 ...
- sql server 常见问题笔记
1.关于复制类型 快照发布:发布服务器按预定的时间间隔向订阅服务器发送已发布数据的快照. 事务发布:在订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器. 对等发布:对等发布支 ...
- unity中的WWW通讯问题
网上很多写到WWW的问题. 一.局限性比较大,使用不方便二.WWW类的使用不符合微软的命名规范三.在大量并发使用WWW类会发生"Too Many Threads"的异常 确实有些, ...
- jquery的blur之后,focus获取不到焦点的解决办法
一:很多童鞋可能会遇到这种情况: jquery的blur之后,focus获取不到焦点. 二:使用场景: 用户填写信息的时候,若邮箱为空,则提示 请填写邮箱,并将光标置于填写邮箱的文本框里,方便用户的再 ...