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

字符串string

一些初始化string对象的方式:

string str; //str是一个空字符串
string str1(str2); // str1是str2的副本
string str1 = str2; // 等同于str1(str2)
string str("val"); // str是"val"的副本
string str = "val"; //等价于str("val")
string str(n,'a'); //把str初始化为由连续n个字符a组成的串
  • 拷贝初始化:用 = 将一个已存在的对象拷贝到正在创建的对象
  • 直接初始化:通过()给对象赋值

string的操作:

getline(str1,str2):从str1中读取一行赋给str2,返回str2 ,读取一整行,包括空白符

str.size():返回的是string::size_type类型,是一个无符号类型的值

处理string对象中的字符:

C++版本和C版本头文件的区别:

  • C++版本:cctype
  • C版本:ctype.h 

cctype头文件中定义了一组标准函数:

isalnum(str); //当str是字母或数字时为真
isalpha(str); //当str是字母时为真
iscntrl(str); //当str是控制字符时为真
isdigit(str); //当str是数字时为真
isgraph(str); //当str不是空格但可以打印时为真
islower(str); //当str是小写字母时为真
isupper(str); //当str是大写字母时为真
tolower(str); //当str是大写字母,输出对应的小写字母;否则输出原str
toupper(str); //当str是小写字母,输出对应的大写字母;否则输出原str
  • (C++11)范围for:for(auto c : str) 遍历字符串 / for(auto &c : str)使用引用直接 改变字符串中的字符

Vector:

  • vector:容器,也是一个类模板
  • 头文件 #include<vector> 打开标准命名空间using std::vector;
  • 类模板:本身不是类,但可以实例化出一个类。vector是一个模板,vector<int>是一个类型
  • 通过将类型放在类模板名称后面的尖括号中来指定类型,如vector<int> vec;

定义和初始化vector:

vector<T> Vec; //Vec是一个空Vector,类型T,执行默认初始化
vector<T> Vec2(Vec1); //Vec2中包含有Vec1所有元素的副本
vector<T> Vec2 = Vec1; //等价 Vec2(Vec1)
vector<T> Vec(n,val); //Vec中包含了n个重复的元素,每个元素的值都是val
vector<T> Vec(n); //Vec中包含了n个重复的执行了值初始化的对象
vector<T> Vec{a,b,c....};  //Vec包含了初始值个数的元素,每个元素被赋予相应的初始值
vector<T> Vec = {a,b,c....}; //等价于Vec{a,b,c....};

 C++11 列表初始化:vector<string> v{"abc","def","qwe'};

vector支持的操作:

vec.empty(); //vec为空返回真,否则返回假
vec.size(); //返回vec中元素的个数
vec.push_back(t); //向vec的尾端添加一个值为t的元素

 迭代器iterator:

  • 所有标准库容器都可以使用迭代器
  • 类似于指针类型,迭代器也提供了对对象的间接访问

迭代器的使用:

  • vector<int> ::iterator iter
  • auto a = v.begin(); 返回指向第一个元素的迭代器
  • auto b = v.begin(); 返回指向最后一个元素的下一个的迭代器
  • 如果容器为空,begin()和end()返回的是同一个迭代器,都是尾后迭代器
  • 使用解引用符*访问迭代器指向的元素
  • 容器:可以包含其他对象;但所有的对象必须类型相同
  • 迭代器:每种标准容器都有自己的迭代器。C++倾向于用迭代器不是下标遍历元素
  • const_iterator:只能读取容器内元素,不可改变
  • 箭头运算符:item -> val 等价于 (*item).val 

标准容器迭代器的运算符:

*iter; //返回迭代器iter所指向的元素的引用
iter->val;  //等价于(*iter).val
++iter; //iter指向容器中的下一个元素
--iter; //iter指向容器中的上一个元素
iter1 == iter2; //判断两个迭代器是否相等

数组:与vector不同之处--数组长度固定

定义和初始化内置数组:

  • 初始化:char arr[buffer_size]; 长度必须是conse表达式,或者不写,让编译器自己推断
  • 数组不允许直接赋值给另一个数组

 访问数组元素:

  • 数组下标类型:size_t
  • 字符数组:结尾处有一个空字符'\0'
  • 用数组初始化vector; int arr[] = {1,2,3,4,5}; vector<int> vec(begin(arr),end(arr));

指针访问数组:在表达式中使用数组名时,名字会自动转换成指向数组的第一个元素的指针


C标准库String函数,定义在<cstring>中:

strlen(str); //返回str的长度,空字符'\0'不计算在内
strcmp(str1,str2); //比较str1和str2。如果str1 == str2,返回0
                                        str1 > str2,返回正数
                                        str1 < str2,返回负数

strcat(str1,str2); //将str2附加到str1之后,返回str1

strcpy(str1,str2); //将str2拷贝给str1,返回str1

指向指针的指针

  • 定义: int **p = &p1;
  • 解引用:**p; 

动态数组

  • 使用new和delete在堆区中分配存储空间
  • 定义:int *p = new int[3]; 
  • 释放:delete[] p ,不要忘记[]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值