Essential c++初学 第一章 basic c++ programming

Essential c++初学 第一章 basic c++ programming

1. 输入输出与初始化:

cin>>user_name
cout<<'\n'
	<<"hello"

单引号char类型,表示变量类型为字符型。
双引号str类型,表示字符类型变量名字。

常量命名:const —> which mean constant

const int seq_size =18
int pell_seq[seq_size]

以下这一小块是个人理解:

#include <iostream>
#include <string>
using namespace std;

include 类似于Import
using namespace std; 书上说是命名空间,用来封装库,可以避免和应用程序发生命名冲突的问题。(大概类似from xx import xxx )

2. 逻辑运算符:

或运算: ||

if (usr_rsp =='N' || usr_rsp =='n'){
//...
}

与运算:&&

if (password && validate(password)){
//...
}

非运算:!

if (!usr_name)...

3. 条件语句

switch(num_tries)
{
case1:
cout<<"xxxxxxxx";
break;
case2:
cout<<"xxxxxxxxxxxxx";
break;
case3:
cout<<"xx";
break;
...
}

其中sitch后的小括号包含的一定是个表达式,且表达式的值必须是int类型,以对应case后的值。
break用来跳出case。

4.容器
有两种容器,array 和vector
要定义array,必须指定array的元素类型,还得给与array一个名称,并指定其尺寸大小。

 const int seq_size = 18;
 int pell_seq[seq_size];

对于vector object ,必须包含vector头文件,vector 是个class template,所以必须在类名之后尖括号内指定元素类型。

#include<vector>
vector<int>pell_seq(seq_size)

两种容器的初始化:

 int elem_seq[] = {
 1,2,3,3,4,7,2,5,12,
 3,5,10,4,9,16,5,12,22
 }

vector不支持上面这种初始化,必须一个个位置赋值。但可以先初始化一个array然后再整体赋值给vector。

  int elem_seq[] = {
 1,2,3,3,4,7,2,5,12,
 3,5,10,4,9,16,5,12,22
 }
 vector<int>elem_seq(elem_vals,elem_vals+seq_size)

5. 指针

//定义一个指针
int *pi;
//初始化一个指针
int *pi=0;
//验证某指针非空
if(!pi)
//指向元素类型为Int的vector
vector<int>*pv = 0;

使用class boject类型指针和使用内置类型指针有所不同,因为class object关联了一组可调用(invoke)的操作(operation)
//例如,欲检查某个vector的第二个元素是否为1

if(!vector.empty()&&(vector[1] ==1)

语句中的句号 . 称为dot成员选择运算符,用来选择我们想要进行的操作,如果通过指针来选择操作必须用arrow成员选择运算符。

!pv->empty()

并且,如果要使用下表运算符(即中括号索引),我们必须先提领pv。由于下标运算符的优先级较高,因此pv提领操作两旁必须加上下括号

if(pv&&!pv->empty() && ((*pv)[1]==1))

6. 文件读写
读取并写入txt文件,相当于python的open(‘txt’,‘a’)。其中ofstream是一个供输出用的file stream对象。cerr是没有缓存,直接显示在终端上的cout。
说是包括std在内的库,尽量不要使用using namespace std;的方法定义命名空间,而使用如下面程序中的方式,原因还有待深入学习后领悟。

#include <iostream>
#include <fstream>
#include <string>

int main()
{
	std::ofstream out_file("D:/c++_test/test.txt", std::ios_base::app);


	std::string usr_name = "nan";
	int num_tries = 10, num_right = 9;

	if (!out_file)
		std::cerr << "error";
	else
		out_file << usr_name << ' '
		<< num_tries << ' ' << num_right << std::endl;
	
}

ifstream是一个供输入的file stream对象类。以读取模式打开Infile。使用了流输出,这种方法暂时理解为可以识别出空格’ '作为一个标识符,整行数据都不进行数据类型区分,将第一个数据读取传给name,第二个传给nt,第三个传给nc。

#include <fstream>
#include <string>
#include <iostream>
int main() {
	std::ifstream infile("D:/c++_test/test.txt");

	int num_tries = 0;
	int num_cor = 0;
	std::string  usr_name;

	std::cin >> usr_name;

	if (!infile) {
		std::cerr << "He is a new customer";

	}
	else
	{
		std::string name;
		int nt;
		int nc;
		while (infile >> name)
		{
			infile >> nt >> nc;
			if (name == usr_name) {
				std::cout << "welcome back " << usr_name
					<< "\nYour current score is " << nc
					<< "out of " << nt << "\ngood luck!\n";
				num_tries = nt;
				num_cor = nc;
			}

		}


	}

	getchar();
}

章节作业 练习1.6
编写一个程序,从标准输入中输入一系列整数,将读入的整数依次放到vector中,然后遍历这个容器,求总和以及平均值,并将数据都保存在txt中。

#include <string>
#include <iostream>
#include <vector>
#include <fstream>


int main() {
	const int seq_size = 20;
	std::vector<int>vector_seq(seq_size);
	int array_seq[seq_size];
	int vec_num=0;
	std::ofstream outfile("D:/c++_test/assign_1_6.txt", std::ios_base::app);

	
	for (; vec_num < 10;vec_num++) {
		std::cout << "please input a number,"
			<<"if you don't want to continue,just input '-1'"<<std::endl;
		std::cin >> vector_seq[vec_num];
		if (vector_seq[vec_num] == -1)break;
		if (!outfile)
			std::cerr << "error";
		else
			outfile << vector_seq[vec_num]<<std::endl;
		
		//本来使用一个字母作为跳出循环的信号,但数据类型错误会判断混乱
		//有待后续更新		

	}

	int	num_sum = 0;

	for (int ix = 0; ix < vec_num; ix++) {
		num_sum = vector_seq[ix] + num_sum;
	}
	int num_mean = 0;
	if (vec_num == 0)
		std::cout << "try again";
	else
	{
		num_mean = num_sum / vec_num;
		outfile << "the sum is" << num_sum << " ,the mean is" << num_mean;
	}
	
}

遇到的小问题:
Q1:for的第一个位置若初始化vec_num=0会导致for循环体结束后vec_num一直为0?
A:初始化vec_num则会从新在更小的局部区域内指定了一个同名变量,vec_num++改变的一直都是这个小局部变量,离开for循环后,vec_num是在使用外层的那个局部变量,所以值是0。
Q2:为啥-1退出的功能没法实现?
A:在for (; vec_num < 10 && (vec_num!±1);vec_num++)里面的时候当前vec_num都是没有传入数字的,所以即便输入-1,也还是一直没法符合不等于的循环结束条件。
Q3: i++和++i的区别?
A:比如i=3,b=i++就是说b=3,完成之后让i变成4,b=++i就是先让i++变成4,然后b=4,其中++i比i++效率要高些。一般来说在循环域里面,这两者并没有什么很大的区别,但是要注意其生存周期,以及i值在程序流中的变化。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值