3、String类 和 vector vetor杨辉三角triangle

STL阶段一:怎么应用

string类:(动态的顺序表)

string类

C语言中的string是单独的管理配置,不利于类的运用。

 

string常见接口的说明

 

 

构造与销毁

容量操作

元素的访问操作

修改的操作
特殊的操作:字符串翻转

迭代器

 


1、string类的创建

 

函数方法

实例

解释

 

string()

string s1

创建一个空的字符串对象

直接创建对象

string(const char*)

string("hello")

用c字符创创建一个字符创对象

 

string(size_t n,char c)

string(8,'p')

创建一个8个'p'的字符串

 

string (const string&s)

string s2(s1)

用s1创建一个s2

采用拷贝构造函数

 


2、string的容量操作

 

size

s.size( )

都是表示字符串当前字符数目

length

s.length( )

capacity

s.capacity( )

字符串的最大容量

empty

s.empty( )

判断字符创串是否为空

clear

s.clear( )

清空字符串

reserve

s.reserve(100)

 

resize

s.resize(14,'r')

s.resize(11)

 

 

 

 

常见的字符串操作函数:size length capacity empty clear resize reverse

 

resize()

其中resize():就是对当前对象的有效元素的个数的指定  

注意:他不改变capacity的大小

s1.resize(18,'k');// 将字符串s1指定为18 个字符的唱那个度,对多出的部分用'k'填充  

string对象在底层是维护了个静态数组的buff,他的定长是15个字符。如果超过15个字符长度,就会进行动态数组扩容

reverse()

s1.reserve(18);// 她改变的就是capacity大小,但不是指定的大小,而是以16为单位的扩容,因此,现在的大小是31.

 


3、string的遍历操作

 

operator 【】

重载了【】符号

s1[2] == 'g'

begin/end| rbegin/rend

相当于指针的使用

带r的是反向的迭代器

c++98:string::iterater it = s.begin(),就是把字符串的开始位置的指针给了it

c++11:auto it = s.rbegin(),

范围for

相当于for的固定版本

for(auto e:s) cout << e <<endl;

 


4、string的修改

 

push_back('t')

加一个c字符

append(str)

追加

operator +=

可以是c格式字符串,还可以是 string 的对象

c_str(s1)

把C++字符串转成c字符串

find('y')

寻找一个字符的位置,成功返回下标

insert(pos, "^_^")

在指定位置插入数据

erase(s.find(' ')+1 , 3)

指定迭代器(iterator)位置也可以是下标位置()sizze_type pos

substr(pos,8)

从指定位置截取8个字符,然后返回(返回的是字符串)

replace(s.begin()+3,  9, s1)

从迭代器指定位置开始,替换9个字符,用s1,替换

swap(str, s1)

两个字符串交换

 


5、全局的重载的操作符

 

operator< ,> ,<+...

可以比大小{c格式字符串比较是比较的地址大小}

可以是字符串之间比,也可以是C格式字符串和字符串比

operator+

连接字符串

多用+=,这个效率好, +涉及深拷贝

operator>>

输入重载

 

operator<<

输出重载

 

getline(cin,s)

提取一行字符串

std::getline (std::cin,name);从标准输入宏提取一行字符串

operator 【】

重载了【】符号

s1[2] == 'g'

 

输入注意:

1、string以空格和回车作为字符串之间的分割

      可以想到std::getline()       

2、在线OJ输入

    注意输入的格式问题

循环接受字符串: 

       

while(cin>>s){  

    arr[i] = cin

}

vector

和strring一样都是动态顺序表

 

1、vector类的创建

 

方法

实例

解释

vector()

std:: vector<int >s1;

定义一个对象s1

vector(size_type, const value_type&val= value_type)

std:: vector<int >s2(18, 9);

定义一个vector对象中有18个9

vector(const vector&x)

std:: vector<int >s3(s2);

定义一个对象,通过拷贝构造函数拷贝另外一个对象

vector(inputiterator,inputiterator)

std:: vector<int >s4(s1.begin(), s2.end());

通过迭代器(指针)的方式进行拷贝定义

vector{value_type};(列表的初始化)

std::vecotor<int>s5{3, 4, 5, 6, 7, 8, 9}

直接初始化一个动态顺序表

 


2、vector的容量操作

 

操作

描述

实例

size

获取当前容器里数据的个数

s.size();

capacity

获取当前容器最大容量的值

s.capacity();

empty

判断当前容器是否为空

s.empty();

resize

改变容器的size当前有效数据的个数

s.resize()

reverse

改变当前容器的容量大小

 

 

 

 

assign()

重新分配容器的空间

s.assign(10,'u')

把s分配成10个'u'

 

迭代器失效:由于迭代器本质就是一个指针,指针所指向的空间失效了,对应的迭代器失效了

                    {只要引起容器底层容量发生变化,这样就会引起迭代器失效}

插入数据时要注意空间是否能发生变化,如果变化,就要刷新迭代器{给迭代器重新赋值}

          

  swap(); push_back();resize();reverse();insert(); erase(  ); assign();

 

 

用vetor创建一个杨辉三角

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值