想记录一下自己的C++学习之路,在这就把它当做一个笔记吧,希望通过这种方式加深自己对知识点的掌握,也希望能够给一些需要的朋友进行一些帮助。
学习参考书籍 C++ Primer 第五版
用法
:using namespace :: name;
功能
:可以直接使用name在程序当中,少写所属的namespace,能够让代码看的更简洁;
例子
:using std::cout; using std::endl;
注意事项
:1、结束后有个分号;2、不建议放在头文件中
代码如下(示例):
#include
using std::string;
代码如下(示例):
string str1; //定义一个空的字符串
char str11[] = "aaa"; //定义一个字符串,并初始化,字符串其实是一个字符数组;
string str2(str1); //定义一个字符串为str1的副本
string str3("handsom"); //定义一个字符串并且采用直接初始化方式值为handsom
string str4 = "handsom"; //定义一个字符串并且采用拷贝初始化方式对其进行初始化
这里包括字符串的大小,相加,相等等一些操作。
str1.empyt(); //判断一个字符串是否为空,为空返回1,否则返回0
str1.size(); //返回一个字符串的字符的数量,不包括尾的空字符,类型是一个无符号类型。
str1 == str2; //判断两个字符串是否相等
str1 != str2; //判断两个字符串是否不相等
str1 + str2; //将str2字符串加到str1字符串的尾部
//下面的操作是由c语言相关字符操作库继承过来,需要包含ctype头文件
isalnum(c) //为字符或者为数字则返回真
isdigit(c) //为数字返回真
islower(c) //为小写字母时返回真
toupper(c) //将其转换成大写字母
tolower(c) //将其转换成小写字母
//下面的操作是由c语言继承发展而来,使用需要包含cstring头文件
strlen(p) //返回字符串的长度,不包括空字符串
strcmp(p1,p2) //比较两个字符串的大小,相等返回0,p1>p2返回正值
strcat(p1,p2) //将p2拼接到p1后面,并返回p1的值,需要注意内存泄漏问题
strcpy(p1,p2) //将p2复制到p1中,并返回p1,需要注意内存泄漏问题
除此之外,我还发现c++还有一个方便遍历字符、数组、容器的一个方法,感觉还挺好用的,如下。
string st1 = "aaaaa";
//下面这个操作,书上说对于st1的每一个i进行下面缩进的操作,这个是只读的,不能改变字符串等的一些值。
for(auto i : st1)
cout<< i << endl;
//这里是遍历更改值用的,加一个引用,感觉有时候打印还挺方便的
for(auto &i : st1)
i = 'b';
切记:对于字符串、容器、数组,如果下标所对应的元素不存在,不能通过下标来访问改元素。
需要包含的头文件和所需要的命名空间。
#include
using std::vector;
代码如下(示例):
vector<int> v1; //定义一个空的v1容器,容器中的元素数据类型为int类型
vector<int> v2(v1); //定义一个容器,并用容器v1中的元素对其进行初始化
vector<int> v2 = v1; //等同上面
vector<int> v3{1,2,3,4,5} //定义一个容器,并且对其进行初始化
vector<int> v4 = {1,2,3,4,5} //定义一个容器,并且对其进行初始化,等同上
vector<int> v5(10,4) //容器中含有元素为10个4
vector<int> v5{10,4} //容器中含有元素为10和4
int a[] = {1,2,3,4,5};
vector<int> v5(a,a+2); //利用数组对容器进行初始化,注意前后类型是相同的
这里包括字符串的大小,相加,相等等一些操作。
vect1.push_back(a) //将a添加到vect1尾后
vect1.empyt(); //判断一个字符串是否为空,为空返回1,否则返回0
vect1.size(); //返回一个字符串的字符的数量,不包括尾的空字符,类型是一个无符号类型。
vect1 == vect2; //判断两个字符串是否相等
vect1 != vect2; //判断两个字符串是否不相等
注意:对于字符串、容器、数组,如果下标所对应的元素不存在,不能通过下标来访问改元素。
注意:不能使用for循环向其内部的vector容器进行添加元素。
利用迭代器来进行对容器的遍历等操作
vector<int> vec1; //定义一个容器
vector<int>::iterator b = vec1.begin() //定义容器的首元素的一个迭代器
vector<int>::iterator c = vec1.end() //定义容器尾元素下一个位置的迭代器
b++ //迭代器支持加法
iter1 - iter2 //两个迭代器指向同一个容器时,相减为二者之间的距离
//利用迭代器遍历容器中的元素
for(auto c = vec1.begin(); c != vec1.end(); c++)
{
cout<< *c <<endl;
}
//也可以这样来进行遍历
for (auto i : vec1)
cout<< i << endl;
int a[]; //定义一个数组
const int num = 2; //这里num代表设置下面数组的长度,如果不加const定义,下面会报错
int b[num]; //定义一个数组,其长度为2,num必须为常量,不能为变量的值
注意:数组的元素是对象,不能是引用哦,但是定义一个引用来引用一个数组是可以的哦,如下详情。
int c[];
int (*arr)[10] = c; //引用一个数组
int c[] = {1,2,3,4,5};
c[0]; //下标访问
int *p = c;
*(p+2); //指针方式访问,等价于 c[2]
int b[] = c; //错误,不能直接用一个数组去直接初始化另一个数组
string s;
char *str = s; //错误,c++下的字符串不能初始化 char *
char *str1 = s.c_str(); //正确
这里对C++ prime 第三章的字符串和容器等知识点进行了总结,由于个人能力有限,其中可能有些错误,请大家怒斥,嘻嘻,下面继续更新下面的章节,加油!冲冲冲!