Q&A
1.问: C++支持使用assignment运算符“=”进行初始化(eg:int a = 0;),还支持构造函数语法(eg:int a(0);),为什么需要两种不同的初始化语法?
答:使用assignment运算符“=”进行初始化沿袭自C语言,如果对象属于内置类型,或者对象可以单一值加以初始化,这种方式就没有问题。但是如果对象需要多个初值,这种方式就没办法完成任务了。于是需要引入用来处理“多值初始化”的构造函数初始化语法(constructor initialization syntax),下面标准库中的复数就需要两个初值,一个是实部,一个是虚部:
# include <complex>
complex<double> purei(0,7);
2.问:string对象和C-style字符串的差异?
答:(1)string对象会动态地随字符串长度的增加而增加其存储空间,C-style字符串只能分配固定的空间,并期望这个固定空间可以容纳对应的字符串。(2)C-style字符串并不记录自身长度。为了判断C-style字符串长度,我们得遍历每一个元素,直到null字符出现。
KeyPoints
1.关于vector初始化的一些问题:
利用一个整数初始化时,该整数表示数组的大小,且数组中每个元素被初始化为0。
# include <vector>
vector<int> seq(seq_size);
还可以使用已有的数组初始化:
int elem_vals[seq_size] = {0,1,2,3,4};
vector<int> elem_seq(elem_vals,elem_vals+seq_size);
2.关于输入流和输出流的一些问题:
个人理解:输入输出流为屏幕、打印机、文件等提供互相交互的方法。例如cin >> var,从标准输入(键盘)获取,“流”入变量var中。再比如:
ifstream in_file("text.txt");
string word;
in_file >> word;
上面定义了一个文件输入流:in_file,in_file提供了text.txt文件和变量word的互相交互的方法,将文件的内容通过in_file“流”入变量里。
3.setw()函数作用
在C++中,setw(int n)可以用来控制输入间隔,指定后面指定读入不超过n个字符,且默认为左对齐。例子:
#include <iostream>
#include <iomanip>
#include <cstring>
using namespace std;
int main(){
//设置字符串长度为8,但是用setw()函数控制其读取不超过4个字符
const int max_size = 8;
const int real_size = 4;
char user_name[max_size];
cout << "please enter your name:"<<endl;
cin >>setw(real_size)>>user_name;
cout << "the length of user_name is: "<<strlen(user_name)<<endl;
cout << "the user_name is:"<<user_name<<endl;
return 0;
}
结果:
//尽管输入的字符长度超过4,但是由于setw()函数的设置,使其读入字符没有超过4
please enter your name:
helloworld
the length of user_name is: 3
the user_name is:hel
网友评论