STL-string-2

Iterators

 Capacity

resize

void resize (size_t n);void resize (size_t n, char c);

Resize string

将字符串的大小调整为n个字符的长度。 如果n小于当前字符串长度,则当前值将缩短为其第一个n字符,删除第n个字符之后的字符。 如果n大于当前字符串长度,则通过在末尾插入所需数量的字符以达到n的大小来扩展当前内容。如果指定了c,则将新元素初始化为c的副本,否则,它们是值初始化字符(null字符)。

 

reserve

void reserve (size_t n = 0);

Request a change in capacity

请求字符串容量适应计划中的大小更改,最大长度为n个字符。 如果n大于当前字符串容量,则函数会使容器的容量增加到n个字符(或更多)。 在所有其他情况下,它被视为收缩字符串容量的非绑定请求:容器实现可以自由地进行其他优化,并使字符串的容量大于n。 此函数对字符串长度没有影响,也不能更改其内容。

shrink_to_fit

void shrink_to_fit();

Shrink to fit

请求字符串减小其容量以适应其大小。 该请求是非绑定的,容器实现可以自由地进行其他优化,并使字符串的容量大于其大小。 此函数对字符串长度没有影响,也不能更改其内容。

Element access

 Modifiers

 operator+=

string (1)
string& operator+= (const string& str);
c-string (2)
string& operator+= (const char* s);
character (3)
string& operator+= (char c);
initializer list (4)
string& operator+= (initializer_list<char> il);

附加到字符串 通过在字符串当前值的末尾附加附加字符来扩展字符串:

// string::operator+=
#include <iostream>
#include <string>int main ()
{std::string name ("John");std::string family ("Smith");name += " K. ";         // c-stringname += family;         // stringname += '\n';           // characterstd::cout << name;return 0;
}Output:
John K. Smith

append

string (1)
string& append (const string& str);
substring (2)
string& append (const string& str, size_t subpos, size_t sublen = npos);
c-string (3)
string& append (const char* s);
buffer (4)
string& append (const char* s, size_t n);
fill (5)
string& append (size_t n, char c);
range (6)
template <class InputIterator>   string& append (InputIterator first, InputIterator last);
initializer list(7)
string& append (initializer_list<char> il);

附加到字符串

通过在字符串当前值的末尾附加附加字符来扩展字符串:

(1) string

附加str的副本。

(2)  substring

附加str的子字符串的副本。子字符串是str的一部分,从字符位置subbase开始,跨越子字符串(或者直到str的末尾,如果str太短或子字符串为string::npos)。

(3)  c-string

附加由s指向的以null结尾的字符序列(C字符串)形成的字符串的副本。

(4) buffer

追加s指向的字符数组中前n个字符的副本。

(5) fill

追加字符c的n个连续副本。

(6) range

以相同的顺序追加范围[第一个,最后一个)中的字符序列的副本。

(7)  initializer list

以相同的顺序追加il中每个字符的副本。

// appending to string
#include <iostream>
#include <string>int main ()
{std::string str;std::string str2="Writing ";std::string str3="print 10 and then 5 more";// used in the same order as described above:str.append(str2);                       // "Writing "str.append(str3,6,3);                   // "10 "str.append("dots are cool",5);          // "dots "str.append("here: ");                   // "here: "str.append(10u,'.');                    // ".........."str.append(str3.begin()+8,str3.end());  // " and then 5 more"str.append<int>(5,0x2E);                // "....."std::cout << str << '\n';return 0;
}Output:
Writing 10 dots here: .......... and then 5 more.....

push_back

void push_back (char c);

将字符附加到字符串 将字符c追加到字符串的末尾,使其长度增加一。

// string::push_back
#include <iostream>
#include <fstream>
#include <string>int main ()
{std::string str;std::ifstream file ("test.txt",std::ios::in);if (file) {while (!file.eof()) str.push_back(file.get());}std::cout << str << '\n';return 0;
}This example reads an entire file character by character, appending each character to a string object using push_back.

assign

string (1)
string& assign (const string& str);
substring (2)
string& assign (const string& str, size_t subpos, size_t sublen = npos);
c-string (3)
string& assign (const char* s);
buffer (4)
string& assign (const char* s, size_t n);
fill (5)
string& assign (size_t n, char c);
range (6)
template <class InputIterator>   string& assign (InputIterator first, InputIterator last);
initializer list(7)
string& assign (initializer_list<char> il);
move (8)
string& assign (string&& str) noexcept;

将内容分配给字符串

为字符串指定一个新值,替换其当前内容。

(1) string

复制str。

(2)  substring

复制str中从字符位置子组开始并跨越子组字符的部分(如果str太短或子组为string::npos,则复制到str的末尾)。

(3) c-string

复制s指向的以null结尾的字符序列(C字符串)。

(4) buffer

从s指向的字符数组中复制前n个字符。

(5) fill

用字符c的n个连续副本替换当前值。

(6) range

按相同顺序复制范围[第一个,最后一个)中的字符序列。

(7) initializer list

按照相同的顺序复制il中的每个字符。

(8)  move

获取str的内容。 str处于未指定但有效的状态。

// string::assign
#include <iostream>
#include <string>int main ()
{std::string str;std::string base="The quick brown fox jumps over a lazy dog.";// used in the same order as described above:str.assign(base);std::cout << str << '\n';str.assign(base,10,9);std::cout << str << '\n';         // "brown fox"str.assign("pangrams are cool",7);std::cout << str << '\n';         // "pangram"str.assign("c-string");std::cout << str << '\n';         // "c-string"str.assign(10,'*');std::cout << str << '\n';         // "**********"str.assign<int>(10,0x2D);std::cout << str << '\n';         // "----------"str.assign(base.begin()+16,base.end()-12);std::cout << str << '\n';         // "fox jumps over"return 0;
}Output:
The quick brown fox jumps over a lazy dog.
brown fox
pangram
c-string
**********
----------
fox jumps over

insert

string (1)
 string& insert (size_t pos, const string& str);
substring (2)
 string& insert (size_t pos, const string& str, size_t subpos, size_t sublen = npos);
c-string (3)
 string& insert (size_t pos, const char* s);
buffer (4)
 string& insert (size_t pos, const char* s, size_t n);
fill (5)
 string& insert (size_t pos,   size_t n, char c);iterator insert (const_iterator p, size_t n, char c);
single character (6)
iterator insert (const_iterator p, char c);
range (7)
template <class InputIterator>iterator insert (iterator p, InputIterator first, InputIterator last);
initializer list (8)
 string& insert (const_iterator p, initializer_list<char> il);

插入字符串

在由pos(或p)表示的字符之前的字符串中插入其他字符:

(1)string

插入str的副本。

(2)substring

插入str的子字符串的副本。该子字符串是str的一部分,该部分从字符位置subbase开始,跨越子字符串字符(或者直到str的末尾,如果str太短或子字符串为npos)。

(3)c-string

插入由s指向的以null结尾的字符序列(C字符串)形成的字符串的副本。

(4)buffer

在由s指向的字符数组中插入前n个字符的副本。

(5)fill

插入字符c的n个连续副本。

(6)single character

插入字符c。

(7)range

以相同的顺序插入范围[第一个,最后一个)中的字符序列的副本。

(8)initializer list

按照相同的顺序插入il中每个字符的副本。 size_t是一个无符号整数类型(与成员类型string::size_type相同)。

// inserting into a string
#include <iostream>
#include <string>int main ()
{std::string str="to be question";std::string str2="the ";std::string str3="or not to be";std::string::iterator it;// used in the same order as described above:str.insert(6,str2);                 // to be (the )questionstr.insert(6,str3,3,4);             // to be (not )the questionstr.insert(10,"that is cool",8);    // to be not (that is )the questionstr.insert(10,"to be ");            // to be not (to be )that is the questionstr.insert(15,1,':');               // to be not to be(:) that is the questionit = str.insert(str.begin()+5,','); // to be(,) not to be: that is the questionstr.insert (str.end(),3,'.');       // to be, not to be: that is the question(...)str.insert (it+2,str3.begin(),str3.begin()+3); // (or )std::cout << str << '\n';return 0;
}Output:
to be, or not to be: that is the question...

erase

sequence (1)
 string& erase (size_t pos = 0, size_t len = npos);
character (2)
iterator erase (const_iterator p);
range (3)
iterator erase (const_iterator first, const_iterator last);

删除字符串中的字符

擦除字符串的一部分,缩短其长度:

(1)sequence

删除字符串值中从字符位置pos开始并跨越len个字符的部分(或者,如果内容太短或len为string::npos,则直到字符串结束)。 请注意,默认参数会擦除字符串中的所有字符(类似于成员函数clear)。

(2)character

删除p所指的字符。

(3)range

删除范围[第一个,最后一个]中的字符序列。

// string::erase
#include <iostream>
#include <string>int main ()
{std::string str ("This is an example sentence.");std::cout << str << '\n';// "This is an example sentence."str.erase (10,8);                        //            ^^^^^^^^std::cout << str << '\n';// "This is an sentence."str.erase (str.begin()+9);               //           ^std::cout << str << '\n';// "This is a sentence."str.erase (str.begin()+5, str.end()-9);  //       ^^^^^std::cout << str << '\n';// "This sentence."return 0;
}Output:
This is an example sentence.
This is an sentence.
This is a sentence.
This sentence.

replace

string (1)
string& replace (size_t pos,        size_t len,        const string& str);string& replace (const_iterator i1, const_iterator i2, const string& str);
substring (2)
string& replace (size_t pos,        size_t len,        const string& str,                 size_t subpos, size_t sublen = npos);
c-string (3)
string& replace (size_t pos,        size_t len,        const char* s);string& replace (const_iterator i1, const_iterator i2, const char* s);
buffer (4)
string& replace (size_t pos,        size_t len,        const char* s, size_t n);string& replace (const_iterator i1, const_iterator i2, const char* s, size_t n);
fill (5)
string& replace (size_t pos,        size_t len,        size_t n, char c);string& replace (const_iterator i1, const_iterator i2, size_t n, char c);
range (6)
template <class InputIterator>  string& replace (const_iterator i1, const_iterator i2,                   InputIterator first, InputIterator last);
initializer list (7)
string& replace (const_iterator i1, const_iterator i2, initializer_list<char> il);

替换字符串的一部分

将字符串中从字符pos开始并跨越len个字符的部分(或[i1,i2)之间范围内的部分)替换为新内容:

(1)string

复制str。

(2)substring

复制str中从字符位置子组开始并跨越子组字符的部分(如果str太短或子组为string::npos,则复制到str的末尾)。

(3)c-string

复制s指向的以null结尾的字符序列(C字符串)。

(4)buffer

从s指向的字符数组中复制前n个字符。

(5)fill

用字符c的n个连续副本替换字符串的部分。

(6)range

按相同顺序复制范围[第一个,最后一个)中的字符序列。

(7)initializer list

按照相同的顺序复制il中的每个字符。

// replacing in a string
#include <iostream>
#include <string>int main ()
{std::string base="this is a test string.";std::string str2="n example";std::string str3="sample phrase";std::string str4="useful.";// replace signatures used in the same order as described above:// Using positions:                 0123456789*123456789*12345std::string str=base;           // "this is a test string."str.replace(9,5,str2);          // "this is an example string." (1)str.replace(19,6,str3,7,6);     // "this is an example phrase." (2)str.replace(8,10,"just a");     // "this is just a phrase."     (3)str.replace(8,6,"a shorty",7);  // "this is a short phrase."    (4)str.replace(22,1,3,'!');        // "this is a short phrase!!!"  (5)// Using iterators:                                               0123456789*123456789*str.replace(str.begin(),str.end()-3,str3);                    // "sample phrase!!!"      (1)str.replace(str.begin(),str.begin()+6,"replace");             // "replace phrase!!!"     (3)str.replace(str.begin()+8,str.begin()+14,"is coolness",7);    // "replace is cool!!!"    (4)str.replace(str.begin()+12,str.end()-4,4,'o');                // "replace is cooool!!!"  (5)str.replace(str.begin()+11,str.end(),str4.begin(),str4.end());// "replace is useful."    (6)std::cout << str << '\n';return 0;
}Output:
replace is useful.

swap

void swap (string& str);

交换字符串值

通过str的内容交换容器的内容,str是另一个字符串对象。长度可能不同。 在调用该成员函数之后,该对象的值是str在调用之前的值,str的值是该对象在调用之前具有的值。 请注意,存在一个具有相同名称的非成员函数,即swap,用类似于该成员函数的优化重载该算法。

// swap strings
#include <iostream>
#include <string>main ()
{std::string buyer ("money");std::string seller ("goods");std::cout << "Before the swap, buyer has " << buyer;std::cout << " and seller has " << seller << '\n';seller.swap (buyer);std::cout << " After the swap, buyer has " << buyer;std::cout << " and seller has " << seller << '\n';return 0;
}
Output:
Before the swap, buyer has money and seller has goodsAfter the swap, buyer has goods and seller has money

pop_back

void pop_back();

删除最后一个字符 擦除字符串的最后一个字符,有效地将其长度减少一个。

// string::pop_back
#include <iostream>
#include <string>int main ()
{std::string str ("hello world!");str.pop_back();std::cout << str << '\n';return 0;
}hello world 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/351952.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

[操作系统]1.计算机系统概述

写在前面:这篇是为了复习基础知识准备的,而不是根据学校的教材走的,所以叙述有些出入的地方请见谅,该系列旨在快速梳理操作系统的基础知识和一些常见的问题点,知识框架来自于王道操作系统,后续有机会的话会继续补充 1.操作系统的基本概念 一个计算机系统可以自上而下分成四个…

Nginx踩坑记录(二) nginx: [warn] invalid value “TLSv1.3“ in /etc/nginx/nginx.conf:20

问题详情 &#xff08;通过指定配置文件的方式&#xff09;启动nginx&#xff0c;提示告警&#xff0c;nginx启动失败。 rootvultr:~# nginx -c /etc/nginx/conf/nginx.conf nginx: [warn] invalid value "TLSv1.3" in /etc/nginx/conf/conf.d/v2ray.conf:20问题原…

如何快速访问iOS设置:iPad,iPhone,iPod

原文&#xff1a;http://holgr.com/blog/2011/11/no-jailbreak-necessary-how-to-quickly-access-ios-settings-on-your-ipad-iphone-or-ipod/#more-2924 在苹果发布iOS 5之前&#xff0c;快速访问iOS设置程序的唯一方法是越狱后使用SBSettings。在iOS 5以后&#xff0c;苹果公…

ios12越狱自签需要联网_从越狱的iOS切换到Android? 这是你需要知道的

ios12越狱自签需要联网 There are ample comparisons of iOS and Android, but few take into account jailbreak apps and power-users. Jailbroken iOS apps make up for a lot of shortcomings, but if you’re still interested in Android, here’s what you need to know…

pythonista3没有url scheme_URL Scheme是如何实现app之间的跳转

项目演示 URL Scheme是什么 由于苹果的app都是在沙盒中&#xff0c;相互是不能访问数据的。但是苹果还是给出了一个可以在app之间跳转的方法&#xff1a;URL Scheme。简单的说&#xff0c;URL Scheme就是一个可以让app相互之间可以跳转的协议。每个app的URL Scheme都是不一样的…

IPAD2 5.1.1越狱后的屏幕不能自动旋转~~~

己顶&#xff0c;出现这问题的原因是因为越狱安装了插件的原因。问题解决了&#xff0c;大家没有遇到类似的问题吗&#xff1f;问题出在大家都装了一个SBSettings的插件&#xff0c;解决办法就是在这个插件的ISO 5 Notification中打开Disable Toggles 和 Separate List且在Set …

体验下Xcode5与ios7

IOS7的最新更新。 1、自主选择默认地图应用苹果在iOS 6中移除了谷歌地图&#xff0c;使用了自家研发的苹果地图。不得不说&#xff0c;这款自带的地图应用可以说烂到了一定的程度&#xff0c;自发布之后便问题不断。正因如此&#xff0c;苹果应该允许用户在iPhone、iPod Touch…

JVM暂时私有

Jvm: 类加载器分类 引导类加载器&#xff1a;BootStrapClassLoader&#xff08;出于安全考虑&#xff0c;Bootstrap启动类加载器只加载包名为java、javax、sun等开头的类&#xff09; 自定义类加载器&#xff1a;Extension ClassLoader AppClassLoader &#xff08;Tomcat也自定…

android 隐私伪装原理,加锁、隐藏和伪装!三招严防私密App被偷看

随着手机等智能设备的普及&#xff0c;人们的物质生活得到极大的丰富&#xff0c;但随之而来的隐私泄露问题却使得每一个人都几乎变得“透明”。同事、朋友有意无意的把玩起你的手机&#xff0c;随意翻看你的相册、甚至点开一些私密应用如微信、陌陌等&#xff0c;隐私无处躲藏…

蓝桥杯2022年第十三届决赛真题-出差

题目描述 A 国有 N 个城市&#xff0c;编号为 1 . . . N。小明是编号为 1 的城市中一家公司的员工&#xff0c;今天突然接到了上级通知需要去编号为 N 的城市出差。 由于疫情原因&#xff0c;很多直达的交通方式暂时关闭&#xff0c;小明无法乘坐飞机直接从城市 1 到达城市 N&a…

2. 股票的操作知识

》》点赞&#xff0c;收藏关注&#xff0c;理财&技术不迷路《《 目录&#xff1a; 2.1 股票的交易 2.1.1 股票交易模式——在和谁交易&#xff1f; 这个问题看起来简单&#xff0c;但很多初学者其实是没搞明白的&#xff0c;所以花点时间解释下&#xff08;真是苦口婆心…

交易系统开发(一)——交易系统简介

一、交易过程简介 A股市场&#xff0c;投资者必须通过经纪公司交易柜台才能连接交易所&#xff0c;即交易订单从客户策略服务器发至经纪公司交易柜台&#xff0c;交易柜台内部处理后发往交易所&#xff0c;交易所确认报单后发送回报给交易柜台&#xff0c;再从柜台发送至客户策…

QuantFabric量化交易系统架构

一、交易所架构 1、证券交易架构 证券交易包括交易所、买方、卖方&#xff0c;证券交易解决方案架构如下&#xff1a; 卖方是把各种资产包装成产品并提供给市场的实体&#xff0c;如各大证券公司&#xff08;中信证券、中信建投、海通证券、国泰君安证券等&#xff09;、期货…

Easytrader 超简单的股市自动交易神器

往期推荐 量化投资实战教程(1)—基于backtrader的简单买入卖出策略 量化投资原来这么简单(2)—MACD策略(26.9%) 量化投资原来这么简单(3) —A股回测MACD策略 Python 量化投资原来这么简单(4) —KDJ 策略 Python 量化投资原来这么简单(5) — A股回测KDJ策略 Python 量化投资原来…

【easyTrader源码分析1】源码结构梳理

开篇 简单说一下为什么想写这个系列&#xff1a; 我个人对自动化交易比较感兴趣&#xff0c;他山之石&#xff0c;可以攻玉&#xff0c;搞清楚easyTrader&#xff0c;就搞清楚了市面上大部分自动交易方法。实践是检验真理的唯一标准&#xff0c;一个无法实盘的量化交易系统&a…

股票入门知识

目录 01-申请账户 02-行情软件 03-同花顺界面 04-股票规则 05-买股票步骤 小伙伴们大家好&#xff0c;我是Gao&#xff0c;很高兴今天以这样的形式与大家见面。在过去的2020&#xff0c;我经常和朋友聊天&#xff0c;打游戏&#xff0c;从他们那里也得到了很多信息。在一次…

易观千帆 | 2023年3月证券APP月活跃用户规模盘点

易观&#xff1a;2023年3月证券服务应用活跃人数14131.58万人&#xff0c;相较上月&#xff0c;环比增长0.61%&#xff0c;同比增长0.60%&#xff1b;2023年3月自营类证券服务应用Top10 活跃人数6221.44万人&#xff0c;环比增长0.08%&#xff1b;2023年3月第三方证券服务应用T…

上海亚商投顾:沪指震荡调整 酒店等消费股逆势活跃

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 沪指今日震荡盘整&#xff0c;创业板指V型反弹&#xff0c;上证50跌超1%&#xff0c;保险、银行、券商等金融股下挫…

上海亚商投顾:沪指尾盘快速反弹微幅收跌 6G概念大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日震荡调整&#xff0c;临近尾盘集体回升&#xff0c;石油、保险等权重蓝筹走低&#xff0c;上证50盘中…

上海亚商投顾:沪指震荡反弹涨1.2% 中国移动创历史新高

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 大小指数今日走势分化&#xff0c;沪指午后涨超1%&#xff0c;长阳反包上周五阴线&#xff0c;创业板指盘中则跌逾…