c/c++语言开发共享c++ primer(第五版)学习笔记及习题答案代码版(第三章)字符串、向量和数组

笔记较为零散,都是自己不熟悉的知识点。 习题答案至于一个.cc 中,需要演示某一题直接修改 #define num**, 如运行3.23题为#define num323; chapter 3 &n

笔记较为零散,都是自己不熟悉的知识点。
习题答案至于一个.cc 中,需要演示某一题直接修改 #define num**, 如运行3.23题为#define num323;

chapter 3

 

1、

string a4(n, 'c'); //把s4初始化为由连续n个字符c组成的串。

string s5 =string(10,'c'); //拷贝初始化

while(getline(cin, line)) //每次读入一整行,知道达到文件末尾

cout<< line <<>< p="">

触发getline函数返回的按个换行符实际上被丢弃了,得到的string对象不包含换行符。

string.empty(); //函数返回一个对应的布尔值

string.size(); //返回一个string::size_type类型的值,这是一个unsigned int型

//所以,一条表达式中已经有size()函数就不要再使用int了,避免混用带来问题。

 

string s3 = s1 + s2; //两个string对象相加

string s4 = "hello" + ","; //包含字面值相加的情况,必须保证+两侧中有一个是string型

 

2、

为兼容c语言的标准库,c++将这些文件命名为cname。在名为cname的头文件中定义的免费精选名字大全从属于命名空间std,而定义在.h中的头文件则不然。

decltype(s.size()) punct_cnt =0; //punct_cnt的类型和s.size的返回值类型一样。

ispunct(c); //判断标点符号的个数

for(auto &c : s) //对于s中的每个字符(c是引用)

c = toupper(c); //c是一个引用,因此赋值语句将改变c中字符的值。

cout<< s <<>< p="">

 

3、

vector是模板而非类型,由vector生成的类型必须包括vector中元素的类型,例如vector

vector<>>vector对象的又尖括号和其他元素类型之间要添加一个空格。

<>

vectorv1{"a", "an", "the"}; //列表初始化

vector vi =10; //错误,必须使用直接初始化的形式执行想来那个大小。

vector v7{10};vector v8{10, "hi"};//都不是列表初始化,有10个元素的初始化

vector对象(包括string对象)的下标可用于访问已存在的元素,而不能用于添加元素。

string s("string");

if(s.begin() != s.end()){

auto it = s.begin();

*it = toupper(*it); //通过解引用迭代器来获取它所指示的元素。

}

将指向同一容器中元素的两个迭代器相减,结果是两个迭代器的距离。其类型是difference_type,可正可负,是带符号类型的。

4、

char a3[] = "c++";

const char s4[6] ="daniel"; //错误,没有空间可存放空字符

指针和数组

string nums ={"one","two","three"};

string *p = &nums[0]; //p指向nums的第一个元素

string *p2 = nums; //等价于p2 = &nums[0];

int arr[] ={0,1,2,3,4,5,6,7,8,9};

int *e = &arr[10]; //指向尾元素的下一个元素

for(int *b = arr; b != e; ++b)

cou<<*b <

5、

两个指针相减的结果类型是一种名为ptrdiff_t的标准库类型,和size_t一样,其也是定义在cstddef头文件中的机器相关的类型。ptrdiff_t是带符号的类型。

int ia[] = {0,2,4,5,8};

int *p = &ia[2];

int k = p[-2]; //p[-2]是is[0]表示的那个元素

内置的下标运算符所用索引值不是无符号类型,这与string和vector不同。

6、

char ca[] = {'c', '*', '1'};

cout << strlen(ca)<

string s("hello");

char *str = s; //错误,不能用string对象初始化char*

const char *str =s.c_str(); //正确。如果想一直使用c_str()返回的数组,最好将其拷贝一份

多维数组

int ia[3][4];

int (*p)[4] = ia;

int *ip[4]; //整形指针的数组

int (*ip)[4]; //指向含有4个整数的数组

 

  #include   #include   #include   #define num343    using namespace std;  string sa[10];  int ia[10];    int main(){  /*3.1*/  #ifdef num31  	cout<<"参见:https://blog.csdn.net/refuil/article/details/51226530 "  		"https://blog.csdn.net/refuil/article/details/51236735"<> word)		//一次读入一个单词,直至遇见文件结束符  		cout << word < str2)  		cout << "the bigger one is: " << str1 < len2)  		cout << "the longer one is: "<> str)  		sum += str;  	cout<< "the concatenation of string is: "<< sum <> str)  		sum += " " + str;  	cout<< "the concatenation of string is: "<< sum < v2(10);     // size:10, value:0  	cout<<"v2: size is "< ivec;  	ivec[0] = 42;  	cout<<"不合法,ivec是空的vector,不允许通过下标形式访问任何元素,只能用push_back添加元素."< vec1(10,42);  	vector vec2{42,42,....};  	vector vec3(10);  	for(vector::iterator iter = vec.begin(); iter != vec.end(); ++iter)  		*iter  = 42;  #endif  /*3.20*/  #ifdef num320  	int val;  	vector vec;  	cout<< "enter numbers: " <> val)  		vec.push_back(val);  	if(!vec.size()){  		cout<<"no elements! " <::size_type first, last;  	for(first = 0, last = vec.size()-1; first < last; ++first, --last)  		cout<< vec[first] + vec[last] << " ";  	cout< vec;  	cout<< "enter the numbers: "<> val)  		vec.push_back(val);  	if(!vec.size()){  		cout<<"no element! "<::iterator it = text.begin();  	for(string::iterator iter = (*it).begin(); iter != (*it).end(); ++iter)  		*iter = toupper(*iter);  	for(;it != text.end(); ++it)  		cout<< *it < vec(10,1);  	for(vector::iterator iter = vec.begin(); iter !=vec.end(); ++iter){  		*iter = (*iter) * 2;  		cout<< *iter <<" ";  		if(iter == vec.end()-1) cout<::iterator iter = scores.begin();  	unsigned grade;  	while(cin >> grade){  		if(grade <= 100){  			iter = iter + (grade/10);  			(*iter)++;  			iter = scores.begin();   //the iterator must be returned  		}  	}  	for(iter = scores.begin(); iter != scores.end(); ++iter)  		cout<< *iter <<" ";  	cout< vec2(10);  	int i = 0;  	cout<<"vec1: ";  	for(auto &c : vec1){  		c = i;  		++i;  		cout<< c<<" ";  	}  	cout<> arr2[i];  	for(size_t i = 0; i !=arr_size; ++i)  		if(arr1[i] != arr2[i]){  			cout<< "array1 is not same with array2."< vec1(5), vec2(5);  	cout<< "enter 5 numbers for vector1: "<> c;  	cout<< "enter 5 numbers for vector2: "<> c;  	for(vector::size_type ivec =0; ivec != vec1.size(); ++ivec)  		if(vec1[ivec] != vec2[ivec]){  			cout<< "vector1 is not same with vector2."< 0)  		cout<< s1 <> arr[i];  	vector vec(begin(arr), end(arr));//另一种写法vector vec(arr, arr+arr_size)  	for(auto &c : arr)  		cout << c << " ";  #endif  /*3.42*/  #ifdef num342  	int val;  	vector vec;  	cout<< "enter numbers for vector: " <> val)  		vec.push_back(val);  	if(!vec.size()){  		cout<<"no elements! " <::iterator i = vec.begin(); i != vec.end(); ++i, ++ix)  		pstr[ix] =  *i;  	for(ix =0; ix < vec.size(); ++ix)  		cout<< *(pstr+ix) <<" ";  	delete []pstr;  #endif  /*3.43*/  #ifdef num343  	int arr[3][4] ={0,1,2,3,4,5,6,7,8,9,10,11};  	/*版本一*/  	for(auto *p = begin(arr); p != end(arr); ++p)  		for(auto q = begin(*p); q != end(*p); ++q)  			cout<< *q <<" ";  	cout

 

 

<>

 

<>

 

 

 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/606367.html

(0)
上一篇 2021年5月13日
下一篇 2021年5月13日

精彩推荐