【我的C++学习之路】

字符串、向量和数组学习

前言

想记录一下自己的C++学习之路,在这就把它当做一个笔记吧,希望通过这种方式加深自己对知识点的掌握,也希望能够给一些需要的朋友进行一些帮助。


学习参考书籍 C++ Primer 第五版

目录

  • 字符串、向量和数组学习
  • 前言
  • 一、命名空间
  • 二、字符串string
    • 1.引入库
    • 2.定义与初始化
    • 3.相关操作
  • 三、容器vector
    • 1.引入库
    • 2.定义与初始化
    • 3.相关操作
    • 4.迭代器
  • 四、数组
    • 1.数组的定义
    • 2.数组的访问和初始化
    • 3.C语言与C++之间的字符接口
  • 总结

一、命名空间

用法:using namespace :: name;

功能:可以直接使用name在程序当中,少写所属的namespace,能够让代码看的更简洁;

例子:using std::cout; using std::endl;

注意事项:1、结束后有个分号;2、不建议放在头文件中

二、字符串string

1.引入库

代码如下(示例):

#include 
using std::string;

2.定义与初始化

代码如下(示例):

string str1;              //定义一个空的字符串
char str11[] = "aaa";     //定义一个字符串,并初始化,字符串其实是一个字符数组;

string str2(str1);        //定义一个字符串为str1的副本
string str3("handsom");  //定义一个字符串并且采用直接初始化方式值为handsom
string str4 = "handsom"; //定义一个字符串并且采用拷贝初始化方式对其进行初始化

3.相关操作

这里包括字符串的大小,相加,相等等一些操作。

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';

切记:对于字符串、容器、数组,如果下标所对应的元素不存在,不能通过下标来访问改元素。


三、容器vector

1.引入库

需要包含的头文件和所需要的命名空间。

#include 
using std::vector;

2.定义与初始化

代码如下(示例):

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);       //利用数组对容器进行初始化,注意前后类型是相同的

3.相关操作

这里包括字符串的大小,相加,相等等一些操作。

vect1.push_back(a)       //将a添加到vect1尾后
vect1.empyt();           //判断一个字符串是否为空,为空返回1,否则返回0
vect1.size();            //返回一个字符串的字符的数量,不包括尾的空字符,类型是一个无符号类型。
vect1 == vect2;          //判断两个字符串是否相等
vect1 != vect2;          //判断两个字符串是否不相等

注意:对于字符串、容器、数组,如果下标所对应的元素不存在,不能通过下标来访问改元素。

注意:不能使用for循环向其内部的vector容器进行添加元素。

4.迭代器

利用迭代器来进行对容器的遍历等操作

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;

四、数组

1.数组的定义

int a[];                          //定义一个数组
const int num = 2;				  //这里num代表设置下面数组的长度,如果不加const定义,下面会报错
int b[num];                       //定义一个数组,其长度为2,num必须为常量,不能为变量的值

注意:数组的元素是对象,不能是引用哦,但是定义一个引用来引用一个数组是可以的哦,如下详情。

int c[];
int (*arr)[10] = c;              //引用一个数组

2.数组的访问和初始化

int c[] = {1,2,3,4,5};
c[0];                             //下标访问

int *p = c;
*(p+2);                          //指针方式访问,等价于 c[2]

int b[] = c;                    //错误,不能直接用一个数组去直接初始化另一个数组

3.C语言与C++之间的字符接口

string s;
char *str = s;                //错误,c++下的字符串不能初始化 char *
char *str1 = s.c_str();       //正确

总结

这里对C++ prime 第三章的字符串和容器等知识点进行了总结,由于个人能力有限,其中可能有些错误,请大家怒斥,嘻嘻,下面继续更新下面的章节,加油!冲冲冲!

你可能感兴趣的:(我的C++学习之路,c++,学习,开发语言)