程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> c++ primer(第五版)學習筆記及習題答案代碼版(第三章)字符串、向量和數組

c++ primer(第五版)學習筆記及習題答案代碼版(第三章)字符串、向量和數組

編輯:關於C++

筆記較為零散,都是自己不熟悉的知識點。
習題答案至於一個.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 <

觸發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 <

 

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<<"參見:http://blog.csdn.net/refuil/article/details/51226530 "
		"http://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

 

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved