字符串、向量和数组

1.string

string是一种库函数。
定义和初始化string对象

string s1; //默认初始化,s1是空字符串
string s2 = s1 //s2是s1的副本
string s3 ("value") //s3是字面值“value”的副本,除了字面值最后的那个空字符外
string s3 = "value"//等价于上式
string s4(n,'c')//初始化n个c

直接初始化和拷贝初始化

string s5 ="dong"//拷贝初始化
string s6("dong")//直接初始化
string s7(10,'d')//直接初始化 

2.vector

vector对象能够高效增长,在定义vector对象时,没有必要设定其大小(事实上这么做性能会更差)。

vector<int> tes;
tes.push_back(t);
v.empty();
v.size();

3.数组

数组是一种类似于标准库vector的数据结构,但在性能和灵活性权衡上与vector有所不同,通过对象所在位置进行访问。
数组声明a[d],a是数组的名字,d是数组的维度,维度必须是一个常量表达式(指不会改变且在编译阶段就知道结果的表达式)

unsigned cnt = 42 //不是常量表达式
constexptr unsigned sz = 42;//常量表达式
int  arr[10] //含有10个整数的数组
int *arr[10] //含有10个整型指针的数组

复杂数组声明

int *ptr[10];
int &refs[10] = ?//错误,不存在引用的数组
int (*ptr)[10] = &arr;// ptr指向一个含有10个整数的数组
int (&arrRef)[10] = arr ;//arrRef引用一个含有10个整数的数组

字符数组的特殊性:
除了显示初始化数组外,还可以用字符串字面值对此类数组初始化。
当采用这种方式时,需注意字符串尾还有一个空字符,这个空字符也会被拷贝进数组中。

char a2[] = {'c','+','+','\0'};//维度为4
char a3[] = "c++";//维度为4
cinst char a4[6] = "daniel";//错误,没有空间放空字符

相较于 vector,数组的大小在定义时就固定,不能随意向数组中增加元素。

指针和数组:
使用数组时,编译器一般会把它转换成指针。

string *p = &nums[0];
//等价于
string *p = nums;

4.多维数组

多维数组是数组的数组。
注意:

for(const auto &row : ia)//对于外层数组的每一个元素
for(auto col : row)//对于内层数组的每一个元素
cout << col << endl;

将外层循环控制变量声明成引用,避免数组被自动转成指针。

for(auto row : ia)
for(auto col : row)

此时程序无法编译通过,编译器在初始化row时会自动将数组形式的元素转化成指向该数组内的首元素的指针,这会使row的类型变成int* ,内层循环不合法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值