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

标准库类型 string

标准库类型string表示变长的字符序列。
使用string要加上头文件

#include<string >

string初始化

string s1;
string s2=s1;
string s3="hiya";//拷贝初始化
string s4("hiya");//直接初始化
string s5(10,'c');//s5的内容是cccccccccc,直接初始化

string对象上的操作

os<<ss写到输出流os当中,返回os
is>>s在is中读取字符串赋给s,字符串以空白分割,返回is
getline(is,s)在is中读取一行赋给s,返回is
s.empty()s为空返回ture,否则返回false
s.size()返回s中字符的个数
s[n]返回s中第n个字符的引用,n从0开始算起
s1+s2返回s1和s2连接后的结果
s1=s2用s2的副本代替s1中原来的字符
s1==s2比较所含字符是否相等
s1!=s2比较
<,<=,>,>=利用字符比较大小

读写string对象

string s1,s2;
cin>>s1;
cout<<s1<<endl;
cin>>s1>>s2;
cout<<s1<<s2<<endl;

字符输入时,会自动忽略开头的空白(回车、换行、制表符),从第一个真正的字符开始,遇到空白结束。

读取未知数量的string

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

利用getline读取一整行

string line ;
whilegetline(cin,line))
     cout<<line<<endl;

字符串与字面值相加

在进行加法运算时,必须保证+左右必须有一个时string类型

处理每个字符

使用范围for语句对string对象中的每个字符进行操作
语法形式:

for(declaration : expressioon)
    statement
//expression部分是一个对象,declaration负责定义一个变量用于访问
//序列中的元素

举例:

//输出str中的每个字符
string str("abcdef");
for(auto c:str)
   cout<<c<<endl;

标准库类型vector

标准库类型vector表示对象的集合,称之容器
using声明与头文件

#include<vector>
using std:vector;

vector是一种类模板,根据模板创建类或函数的过程称为实例化,当使用模板时,需要指出将其是实例化为何种类型。例如:

vector<int> ivec;
vector<vector<int>> vivec;

初始化vector

在这里插入图片描述

vector<int> v1(10);//v1有10个元素。每个的值为0
vector<int> v2{10};//v2有一个元素,值为10
vector<int> v3(10,1);//v3有10个元素,每个值为1
vector<int> v4{10.1};//v4有2个元素,值为10,2
vector<string> v5("hi");//错误
vector<string> v6{"hi"};//v6有一个元素,值为“hi”

向vector中添加元素

使用push_back向vector的尾端(back)中压入(push)元素

v1.push_back(i);

使用范围for语句访问vector

vector<int> vi{1,2,32,4,5,6,7,8,9};
for(auto &i:vi)
    cout<<i<<endl;//i为引用,将vi中的元素求平方和
for(auto i:vi)
    cout<<i<<endl;

vector对象及string对象的下表运算符可用于访问已存在的元素,而不能用于添加元素

迭代器

begin成员负责返回指向第一个元素的跌倒器
end成员负责返回指向容器尾元素下一位置的迭代器,也叫尾迭代器
当容器为空,begin和end返回的是同一个迭代器,都是尾迭代器

string s=("some string");
aotu it=s.begin();
//*it表示s的第一个字符
//使用++/--移动迭代器

迭代器类型

使用iteratorconst_iterator表示迭代器类型

vector<int>::iterator it ;//it能读写vector<int>中的元素
vector<int>::const_iterator it2;//it只能读vector<int>中的元素

begin和end运算符

vector<int> v1;
const vector<int> v2;
auto it1=v1.begin();//it1类型为iterator
auto it2=v2.begin();//it2类型为const_iterator
auto it3=v1.cbegin()//itc类型为const_iterator

点运算符与箭头运算符

若it为一个指针类型
(*it).memit->mem含义相同

任何使用了迭代器的循环体,都不要向迭代器所属容器中添加元素,否则会使迭代器失效

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值