字符串、向量和数组
标准库类型 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<<s | s写到输出流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 ;
while(getline(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的第一个字符
//使用++/--移动迭代器
迭代器类型
使用iterator与const_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).mem与it->mem含义相同
任何使用了迭代器的循环体,都不要向迭代器所属容器中添加元素,否则会使迭代器失效