C++ Essential 个人总结
第一章
1、 如何使用Array和Vector
array
array大小必须是个常量表达式(constant expression)
int pell_seq[18];
vector
vector是一个class template,所以必须在类名之后的尖括号内指定其元素类型,其大小写在小括号中.
#include <vector>
const int seq_size=18;
vector< int> pell_seq (seq_size);
2、元素的索引和容器的初始化
无论 array 或 vector ,索引操作都是通过下标运算符([])达成,容器的第一个元素位置为0而非1
容器其最后一个元素必须以容器大小减1加以索引
array 可以让编译器根据初始值的数量自行计算大小
int elem_seq[] ={1,2,3};
vector 初始化
1、为每个元素指定值
vector<int> elem_seq(seq_size);
elem_seq[0]=1;
elem_seq[1]=2;
//...
elem_seq[17]=18;
2、利用一个已经初始化的 array 作为 vector 的初始值
Int elem_vals[seq_size]={
1,2,3
} ;
// 以elem_vals 来初始化 elem_seq
vector<int> elem_seq( elem_vals, elem_vals+seq_size);
对 vector 初始化传入的值为实际内存位置,标示出了“用以将 vector 初始化的元素范围”
3、指针
指针内含某类型特定对象的内存地址,定义指针类型后加*。
取值运算符(&):用于指针的初始化
指针的难点
1、指针双重性质:既可以用于操作指针所包含的内存地址,又可以操作指针所指的对象值
2、指针可以不指向任何对象,所以在进行提领操作前需要先确认指针的确指向某对象。
if (!pi && ...)
穿插补充知识点
随机化:rand() 和 srand()
# include <cstdlib>
const int seq_cnt = 6;
srand(seq_cnt);
seq_index = rand() %seq_cnt;
current_vec = seq_addrs[seq_index];
rand() 和 srand 是标准库提供的伪随机数(pseudo-random number)生成器,srand()的参数是所谓随机数生成器种子(seed),相当于根据传入的参数规定了rand()产生的随机数的上界。,两个函数的声明都位于 cstdlib 头文件中
class object 指针
class object 指针相比较内置类型的指针,因为class object关联了可以调用的操作,使用class object的指针也可以实现操作的调用
举例:检查 fibonacci vector 第二个元素是否为1
if(!fibonacci.empty()&&fibonacci[1]==1)
使用 fibonacci vector 的指针实现相同的操作:
if( !pv && pv->empty() && ((*pv)[1]==1))
以上的等效需要注意三点
1、检验pv是否为非零值
2、fibonacci 和 empty() 之间的句点称为 dot 成员选择符(member selection operator),用来选择想要的操作,使用指针则需要改用 arrow 成员选择符
3、使用下标运算符,必须先提领 pv,但由于下标运算符的优先等级较高,pv的提领操作两旁需要加上小括号
文件的读写
包含fstream头文件
#include <fstream>
打开一个可供写入的文件
定义 ofstream (供输出的file stream 对象),将写入的文件名传入
// 输出方式打开"seq_data.txt"
ofstream outfile("seq_data.txt");
如果指定的文件不存在,会有一个文件被创建并被打开供输出使用,如果已经存在,文件会被打开用于输出,文件原有数据会被丢弃,如果希望以追加方式增添新的数据,需要以追加模式(append mode)打开文件:
ofstream outfile("seq_data.txt",ios_base::app);
在写入操作之前,需要确认文件是否打开成功,如果未打开成功,将错误信息可以写到cerr(标准错误设备standard error),
if(! outfile)
cerr<<"Oops! Unable to save session data!\n ";
else
outfile << usr_name << endl;
打开一个可供读取的文件
ifstream infile("seq_data.txt");
打开一个可以同时写入和读取的文件
fstream iofile("seq_data.txt",ios_base::in|ios_base::app);
浙公网安备 33010602011771号