C++ 字符串、向量和数组

编程入门 行业动态 更新时间:2024-10-25 20:30:58

C++ 字符串、<a href=https://www.elefans.com/category/jswz/34/1768665.html style=向量和数组"/>

C++ 字符串、向量和数组

1、::作用域符,编译器应从操作符左侧名字所示的作用域中寻找右侧的名字。
2、拷贝初始化与直接初始化,直接初始化使用’=‘,拷贝初始化使用’='。

string

1、初始化

string s = “hello”;
string s(“hello”);
string s(10, ‘c’); s的内容为"cccccccccc"

2、string常用操作

操作符功能
os<<s将s写进输出流os中,返回os
is>>s将is中读到的字符串赋值给s
getline(is,s)从is中读取一行给s,返回is
s.empty()判空操作
s.size()返回s中字符个数
s[n]s中第n个字符引用,从0开始
s1+s2字符串连接,但是需要注意不能两者都是字面值:“hello”,因为字符串字面值 != string,是不同的类型
s1 = s2用s2为s1重新赋值
s1 == s2
s1 != s2两个字符串所含的字符是否完全一样,大小写敏感
<, <=, >, >=大小写敏感
cin>>s将string对象读入s,遇到空白停止
cout<<s输出

3、cctype头文件的函数

函数名功能
isalnum©c为字母/数字时为true
isalpha©c为字母时为true
iscntrl©c为控制字符时为true
isdigit©c为数字时为true
isgraph©c不是空格但可以打印时为true
islower©c为小写字母时为true
isprint©c可打印(即c是空格/具有可视形式)时为true
ispunct©c为标点符号时为true
isspace©c为空白时为true
isupper©c为大写字母时为true
isxdigit©c为十六进制数字时为true
tolower©
toupper©输出小写
输出大写

4、遍历字符串

for(auto c : str){
cout<<c<<endl;
}

vector

1、头文件与命名空间

#include
using std::vector;

2、定义和初始化vector对象

vector v1;默认初始化,v1为空vector
vector v2(v1);v2中包含v1中所有元素的副本
vector v2 = v1;与vector v2(v1)效果相同
vector v3(n, val);v3中包含n个元素,且值都为val
vector v4(n);v4包含n个元素,值都是T类型的初始值
vector v5{a,b,c,…}列表初始化,每一个值都给出了
vector v5 = {a,b,c,…}与vector v5{a,b,c,…}效果相同

:::info
圆括号提供的值是用来构建vector对象的;花括号提供的值是想列表初始化该vector对象,初始化时先用列表初始化,若不成功则进行其他初始化操作。
:::

3、vector常见操作

函数功能
v.push_back(t)v的后端添加一个值为t的元素
v.empty()判空操作
v.size()返回v中元素个数
v[n]返回v中第n个元素引用,从0开始
v1 = v2用v2中的元素拷贝替换v1中的元素
v1 = {a,b,c,…}用列表中的元素拷贝替换v1中的元素
v1 == v2
v1 != v2两个vector对应元素相同
<, <=, >, >=按字典顺序比较

vector不能使用下标来添加元素:
vector x;
x[0] = 1; //错误
x.push_back(1);//正确

迭代器

提供对对象的间接访问,有迭代器的类型都拥有begin和end。

标准容器迭代器的运算符

*iter返回迭代器iter所指元素的引用(元素值)
iter->mem等价于(*iter).mem,解引用iter获取该元素名为mem的成员
++iter令iter指向下一个元素
–iter令iter指向上一个元素
iter1 == iter2
iter1 != iter2判断两个迭代器指向的是否为同一元素

循环遍历迭代器:

string s("some string");
for(auto it = s.begin(); it != s.end(); ++it){// 利用*it取值
}

迭代器运算(vector与string支持)

iter+n向前移动n个元素
iter-n向后移动n个元素
iter+=niter位置加n,结果赋给iter
iter-=niter位置减n,结果赋给iter
iter1 - iter2返回两者之间的距离,iter1与iter2必须指向同一容器中元素或尾元素的下一个位置
>, >=, <, <=位置比较

指针的比较

只要两个指针指向同一数组的元素就可进行比较。
指针加一个整数返回的结果还是指针:
int ia[] = {0,2,4,8};
int last = *(ia + 4); //ia[4]的值
int last = *ia + 4; //ia[0]的值 + 4

c标准库string函数

需要头文件 string.h

函数名功能
strlen(s)返回s的长度,空字符不算在内
strcmp(s1, s2)比较s1与s2,s1==s2时,返回0,s1 < s2时,返回负值 s1 > s2时,返回正值
strcat(s1, s2)s2附加到s1之后,返回s1
strcpy(s1, s2)将s2拷贝给s1,返回s1

:::info
注:传入此类函数的指针必须指向以空字符作为结束的字符数组。
char ca[] = {‘c’,‘+’,‘+’};//但是 ca[]=“c++” 可以,因为默认会自动增加一个结束符 ‘\0’
cout << strlen(ca)<<endl;//错误
:::

对于string对象,可以直接比较大小与连接;而对于c风格字符串,则需要使用strcmp()、strcat()来进行比较与连接。
因为使用数组时,真正使用的是指向数组首元素的指针,而这样比较的其实是char*的值,但是这两个不是指向同一对象,不能进行比较。

string与c风格字符串转换:string可以通过c_str()转换为c风格字符串。
string s = “hello”;
char *str = s.c_str();

数组

初始化

int a[n] = {0,1,2,3,..}; //n列
int a1[] = {0,1,2} //三列string b[] = "c++";//b是四列,字符数组最后有一个空字符 '\0'
string b[] = {'c','+','+'};//b是三列

不能将数组的内容拷贝到其他数组作为初始值,也不能用数组为其他数组赋值,但是可以利用数组初始化vector:

int arr[] = {1,2,3,4};
vector<int> ivex(begin(arr), end(arr));

特殊数组声明

int *ptrs[10]; //ptrs为含有10个整形指针的数组int (*parray)[10] = &arr; //parray指向一个含有10个元素的数组int (&arrRef)[10] = arr; //arrRef引用一个含有10个元素的数组

多维数组

c++中没有多维数组,即没有数组的数组,需要使用多个维度表示。
初始化方式:

int ia[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}
};int ia[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};int ia[3][4] = {0,1,2,3}; //显式初始化第一行,其他元素执行值初始化int ia[3][4] = {{0},{4},{8}};//显式初始化每一行首元素

c++11中利用for语句处理多维数组

size_t cnt = 0;
for(auto &row : ia){for(auto &col : row){col = cnt;++cnt;}
}

将控制变量声明为引用类型,是为了避免数组被自动转换成指针。
其中最外层(row)必须定义为引用,如果不修改值 col可以不用定义为引用。若row、col都不定义引用,则编译报错。

更多推荐

C++ 字符串、向量和数组

本文发布于:2024-02-11 15:13:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1681659.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:向量   数组   字符串

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!