C++学习笔记二(字符串、向量和数组)

字符串、向量和数组
1、有了using声明就无须专门的前缀也可以使用所需的名字了。
形式:using namespace ::name;

如:using namespace std;

2、标准库类型string
string表示可变长的字符序列,使用string类型必须首先包含string头文件。

#include <string>
using std::string;

*定义和初始化string对象

string s1; //默认初始化,一个空字符串
string s2 = s1; //s2是s1的副本
string s3 = "hello"; //s3是字符串字面值的副本--拷贝初始化
string s4(10, 'c'); //s4的内容是cccccccccc--直接初始化

*string的操作
getline(cin, s); //从cin中读取一行赋给s,返回cin
s.empty(); // s为空时返回true
s.size(); //返回s中字符的个数,类型为string::size_type是一个无符号类型的值。

*读取未知数量的string对象

while(cin>>s)
{
 cout<<s<<endl;
}

*两个string对象相加
注意:必须确保每个加法运算符的两侧的运算对象至少有一个是string。

*处理string对象中的字符
在cctype头文件中定义了一组标准库函数处理这部分工作。
处理每个字符?使用基于范围的for语句
for (declaration : expression)
 statement
expression是一个对象,用于表示一个序列(如字符序列);declaration部分负责定义一个变量,每次迭代,declaration部分的变量会被初始化为expression部分的下一个元素值。
如:
string str(“some string”);
for (auto c : str)
 cout << c << endl;

使用for语句改变字符串中的字符
注意把循环变量定义成引用类型
for (auto &c : s)
 c = toupper©;

标准库类型vector
vector表示对象的集合,所有对象的类型都相同,集合中每个对象都有一个与之对应的索引,索引用于访问对象。使用vector,要包含适当的头文件。
#include < vector >
using std:: vector;

初始化有列表初始化

vector<int> ivec{"a","b","c"};
vector<int> ivec(10);//10个元素,每个都初始化为0
vector<int> ivec(10, 1);//10个元素,每个都初始化为1

相关的vector操作
v.empty()
v.size()
v.push_back(t)

迭代器介绍
迭代器可以用来访问string对象、vector对象的元素;除了vector外,标准库还定义了其他几种容器,所有标准库容器都可以使用迭代器。

*使用迭代器
1、这些类型拥有名为begin和end的成员,begin成员负责指向第一个元素的迭代器。end成员则负责返回指向容器“尾元素的下一位置”的迭代器。
2、和指针类似,也能通过解引用迭代器来获取它所指示的元素。
3、使用++运算符将迭代器从一个元素移动到另外一个元素。

*迭代器类型
一般来说我们也不知道迭代器的精确类型,而实际上,那些拥有迭代器的标准库类型使用iterator和const_iterator来表示迭代器的类型。
const_iterator和常量指针差不多,能读取但不能修改它所指的元素值。

注意:但凡使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。
会导致迭代器失效。

*使用迭代器运算
一个经典算法是二分搜索:
二分搜索从有序序列中寻找某个给定(sought)的值。

//text是有序的,beg和end表示我们的搜索范围
auto beg = text.begin(),end = text.end();
auto mid = text.begin() + (end - beg)/2;

//当有元素没有检查完并且我们还没有找到给定的值时执行循环
while(mid != end && *mid != sought){
 if(sought < *mid)
  end = mid;
 else
  beg = mid;
 mid = beg +  (end - beg)/2; //新的中间点
}

数组
一种类似于标准库类型vector的数据结构。不同的是数组的大小确定不变,不能随意向数组中增加元素。

*定义和初始化内置数组
1、显式初始化数组元素:
int a1[] = {1,2,3};
int a2[5] = {1,2,3};//未写的后面补0
2、字符数组的特殊性:用字符串字面值要注意字符串字面值的结尾处还有一个空字符。
char a3[] = “c++”; //自动添加表示字符串结束的空字符
3、不允许拷贝和赋值

4、理解复杂的数组声明
int p[10]; //核心是p,[]的优先级比高,所有它是一个数组,里面的元素指向int *,表示含有10个整形指针的数组
int (*p)[10]; //是一个数组指针,指向一个含有10个整数的数组

c风格字符串
c标准库string函数
c风格字符串的函数
strlen§ //返回p的长度,空字符不计算在内,strnlen(p,n) n是数据总体长度,当检测到字符串长度比数据总体长度还长时就会终止扫描,防止出错。
strcmp(p1,p2) //比较p1和p2的相等性,如果p1和p2相等返回0,p1大于p2返回一个正值
strcat(p1,p2) //将p2附加到p1之后,返回p1
strcpy(p1,p2) //将p2拷贝给p1,返回p1

使用标准库string要比使用c风格字符串更安全、更高效。
如比较两个字符串、连接两个字符串
if(s1 > s2)
;
string largestr = s1 + " " + s2;

详细可以参考博客-C++字符串、向量和数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值