笔记较为零散,都是自己不熟悉的知识点。
习题答案至于一个.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 <> str1 >> str2;
if(str1 == str2)
cout << "They are the same."< 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 <对象的vector对象. "< vec;
int i;
cout<<"Enter number: "<> i){
vec.push_back(i);
}
for(auto &c : vec)
cout<< c;
cout< vec;
string i;
cout<<"Enter string : "<> i){
vec.push_back(i);
}
for(auto &c : vec)
cout<< c;
cout< v1; // size:0, no values.
cout<<"v1: size is "< v2(10); // size:10, value:0
cout<<"v2: size is "< v3(10, 42); // size:10, value:42
cout<<"v3: size is "< v4{10}; // size:1, value:10
cout<<"v4: size is "< v5{10, 42}; // size:2, value:10, 42
cout<<"v5: size is "< v6{10}; // size:10, value:""
cout<<"v6: size is "< v7{10, "hi"}; // size:10, value:"hi"
cout<<"v7: size is "< vec;
while(cin >> str)
vec.push_back(str);
for(decltype(vec.size()) index = 0; index != vec.size(); ++index){
for(auto &c : vec[index]){
toupper(c);
}
cout<< vec[index] < 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 index =0; index < vec.size()-1; index = index +2)//这里不能用index != vec.size();因为index是逢2加,可能直接略过size()大小
cout << vec[index] + vec[index+1] <<" ";
cout<< endl;
//program changed
cout<<"头尾元素相加: "<::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 iter = vec.begin(); iter < vec.end()-1; ++iter)
cout<< *iter + *(iter+1) <<" ";
cout<::iterator first, last;
for(first = vec.begin(), last = vec.end()-1; first < last; ++first, --last)
cout<< *first + *last << " ";
cout< text;
while(cin >> word)
text.push_back(word);
vector::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< scores(11,0);
vector::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< vec1(10);
vector vec2(10);
int i = 0;
cout<<"vec1: ";
for(auto &c : vec1){
c = i;
++i;
cout<< c<<" ";
}
cout<> arr1[i];
cout << "Enter 5 numbers for array2: " <> 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."< str2)
cout<< str1 < 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<
参考资料:
c++ primer中文版第五版,电子工业出版社。
c++ primer第四版习题解答,人民邮电出版社。