字符串、向量和数组

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* ,内层循环不合法。

### MATLAB 中字符向量元胞数组的使用方法 #### 定义字符向量元胞数组 在 MATLAB 中,字符向量元胞数组是一个特殊的元胞数组,其中每个单元格储一个字符向量。可以通过以下方式创建字符向量元胞数组[^2]: ```matlab C = {'Hello', 'World', 'MATLAB'}; ``` 这将创建一个包含三个字符向量的元胞数组 `C`。 #### 转换为字符串数组 从 R2018b 开始,MATLAB 推荐使用字符串数组代替字符向量元胞数组。可以使用 `string` 函数轻松地将字符向量元胞数组转换为字符串数组[^1]: ```matlab strArray = string(C); ``` 此时,`strArray` 是一个字符串数组,内容与原字符向量元胞数组相同。 #### 处理复杂数据结构 假设有一个复杂的字符向量元胞数组,如下所示[^3]: ```matlab data = { '王大锤 18612345678@xyz.com 18612345678'; '吕奉先 lvbu66666@qq.com 16565432198'; '清风 qingfeng_69999@sina.com 15522334455' }; ``` 为了提取姓名、电子邮件地址电话号码,可以按照以下步骤操作: 1. **去除多余空白**:使用 `strtrim` 去除多余的空格。 2. **分割字符串**:使用 `strsplit` 按照空格或其他分隔符拆分字符串。 3. **重新组合数据**:将分离后的字段按需重组。 具体代码如下: ```matlab cleanData = cellfun(@strtrim, data, 'UniformOutput', false); % 去掉前后空格 parsedData = cellfun(@(x) strsplit(x), cleanData, 'UniformOutput', false); % 分割字符串 result = cell(size(parsedData)); % 初始化结果矩阵 for i = 1:numel(parsedData) fields = parsedData{i}; % 获取当前行的字段 result{i} = {fields{1}, fields{end-1}, fields{end}}; % 组合姓名、邮箱、手机号 end % 显示结果 disp(result); ``` 这段代码会输出一个新元胞数组,每一行分别对应姓名、电子邮件地址电话号码。 #### 行名指定 在某些情况下,可能需要为表格或矩阵指定行名。可以使用字符向量元胞数组来定义这些名称[^5]: ```matlab rowNames = {'Row1', 'Row2', 'Row3'}; tableData = rand(3, 3); % 创建随机数据表 T = array2table(tableData, 'RowNames', rowNames); % 设置行名 disp(T.Properties.RowNames); % 查看行名 ``` 这样就可以方便地管理具有命名行的数据集。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值