STL-string-2

news2024/12/28 2:56:09

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-string
  name += family;         // string
  name += '\n';           // character

  std::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 )question
  str.insert(6,str3,3,4);             // to be (not )the question
  str.insert(10,"that is cool",8);    // to be not (that is )the question
  str.insert(10,"to be ");            // to be not (to be )that is the question
  str.insert(15,1,':');               // to be not to be(:) that is the question
  it = str.insert(str.begin()+5,','); // to be(,) not to be: that is the question
  str.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*12345
  std::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 goods
 After 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://www.coloradmin.cn/o/611473.html

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

相关文章

Python接口自动化之yaml配置文件

Python自动化测试&#xff1a;7天练完这60个实战项目&#xff0c;年薪过35w。 软件测试技术分享总结 在自动化过程中&#xff0c;需要使用配置文件储存数据&#xff0c;比如数据库信息、账号信息、域名等。 其中&#xff0c;yaml文件是一种配置文件类型&#xff0c;相比较in…

职场已是00后的天下了,起薪20k,想都不敢想

2023年很卷吗&#xff1f;不&#xff0c;只能说你还得学&#xff01; 都说00后已经躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷&#xff01; 这不&#xff0c;前段时间我们公司新招来了一个00后小伙&#xff0c;工作都没2年&#xff0c;跳槽到我们公司就起薪20K&…

基于linux安装部署clickhouse+基本操作

基于linux安装部署clickhouse基本操作 1.clickhouse简介 ClickHouse 是俄罗斯的Yandex于2016年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用C语言编写&#xff0c;主要用于在线分析处理查询&#xff08;OLAP&#xff09;&#xff0c;能够使用SQL查询实…

一个年薪30w软件测试员的职业规划,献给还在迷茫中的朋友

如果你做了几年的功能测试&#xff0c;如今很迷茫&#xff0c;不知道该往哪里走&#xff0c;那么请看过来&#xff01; 一&#xff1a;技术方向 1. 测试开发工程师&#xff1a; 支撑测试部门&#xff0c;一般来说主要负责设计&编写测试部门所需的测试工具&#xff0c;提…

华为OD机试真题 Java 实现【寻找峰值】【牛客练习题】

一、题目描述 给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。 1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于; 2.假设 nums[-1] = nums[n] = -\infty−∞; 3.对于所有有效的…

被迫在小公司熬了2年,现在我终于进了腾讯测试岗...

其实两年前校招的时候就往腾讯投了一次简历&#xff0c;结果很明显凉了&#xff0c;随后这个理想就被暂时放下了&#xff0c;但是这个种子一直埋在心里&#xff0c;想着总有一天会再次挑战的。 其实这两年除了工作以外&#xff0c;其余时间基本上都在学习&#xff0c;打磨自己…

Ubuntu系统镜像下载,国内镜像站大全(山大/清华/阿里/浙大/中科大...)

装Ubuntu&#xff0c;是很多理工科同学入门的第一个挑战&#xff0c;首先我们就需要找到一个能用的iso镜像&#xff0c;根据你的网络环境的不同&#xff0c;不同的站点下载速度会不一样&#xff0c;下面列举一下几个比较好用的&#xff0c;都是来自Ubuntu官方推荐国内镜像站链接…

一起来学习Vue2吧

虽然Vue3已经出来好一阵子了&#xff0c;但就目前而言&#xff0c;Vue2在市场上还是会占一大部分的&#xff0c;因为一些老项目是用Vue2写的&#xff0c;后期维护也是需要Vue2&#xff0c;而且学会Vue2&#xff0c;Vue3你也会的差不多了&#xff0c;到后面稍微看一下理解一下Vu…

[5]PCB设计实验|卷积神经网络基础|零基础入门深度学习(4) 卷积神经网络|14:00~14:55

资料来源&#xff1a;零基础入门深度学习(4) - 卷积神经网络 - 作业部落 Cmd Markdown 编辑阅读器 目录 1. Relu激活函数 2. 全连接网络VS卷积网络 3. 卷积神经网络 3.1 网络架构 3.2 三维的层结构 4. 卷积神经网络输出值的计算 5. Pooling层输出值的计算 6. 全连…

【自动化测试基础】Appium自动化环境搭建保姆级教程

APP自动化测试运行环境比较复杂&#xff0c;稍微不注意安装就会失败。我见过不少朋友&#xff0c;装了1个星期&#xff0c;Appium 的运行环境还没有搭好的。 搭建环境本身不是一个有难度的工作&#xff0c;但是 Appium 安装过程中确实存在不少隐藏的比较深的坑&#xff0c;如果…

开源赋能 普惠未来|腾讯寄语2023开放原子全球开源峰会

腾讯长期秉承科技向善的宗旨&#xff0c;通过通信和社交服务连接全球逾 10 亿人&#xff0c;提供云计算、广告、金融科技等一系列企业服务。 作为开放原子开源基金会&#xff08;以下简称“基金会”&#xff09;发起人之一&#xff0c;腾讯坚定拥抱开源&#xff0c;全力支持开…

【最新计算机毕业设计 本科 大专 游戏方向 源码】

2022年 - 2023年 最新计算机毕业设计 本科 大专 游戏方向 源码 下载前必看&#xff1a;纯小白教程&#xff0c;unity两种格式资源的使用方法&#xff0c;1打开现有项目、2导入package 大专毕设源码&#xff1a;数媒专业、计算机专业、电子专业通用50多款大专毕设小游戏【源码】…

转行程序员,自学可以吗?35岁会被裁员吗?

大家好&#xff0c;欢迎来到停止重构的频道。 本期我们聊一些技术以外的分享。 一个非科班出身的人转行程序员难吗&#xff1f; 自学可以吗&#xff1f; 我也不是计算机相关专业毕业的&#xff0c;以下聊的都是我的一些真实经历&#xff0c;希望能给想要进入软件行业的非科班…

Centos7安装下载的mysql8+

1.官网下载 MySQL 安装包 1.1选择版本及下载 1、官网地址 https://dev.mysql.com/downloads/mysql/ 2、选择下载 MySQL 的 Linux 系统版本 Select Operating System: 选择 Red Hat &#xff0c;CentOS 是基于红帽的&#xff0c;Select OS Version: 选择 linux 7 3、选择要下…

51单片机银行自助排队叫号系统VIP热敏打印功能DY-SV17F语音播报

实践制作DIY- GC0138-银行自助排队叫号系统VIP 基于51单片机设计---银行自助排队叫号系统VIP 二、功能介绍&#xff1a; STC89C52最小系统板0.96寸OLED显示器DY-SV17F语音串口语音播报模块DS1302北京时间热敏打印机1个业务选择&#xff08;取钱或者存钱&#xff09;1个普通取号…

chatgpt赋能python:Python后门:你需要知道的一切

Python后门&#xff1a;你需要知道的一切 Python是一种广泛使用的编程语言&#xff0c;由于其易学易用、灵活且高效的特点&#xff0c;越来越多的企业和组织采用Python构建应用程序和Web应用。然而&#xff0c;正因为Python的方便性&#xff0c;也使其成为攻击者植入后门程序的…

机器学习 | 聚类问题

一、K均值聚类 这里我们用鸢尾花数据及进行聚类分析&#xff0c;这种含有标签数据的数据集&#xff0c;只要不调用标签数据&#xff0c;就可以为无监督学习所采用。鸢尾花数据具有4个特征&#xff0c;为了可视化这里选取前两个特征进行聚类分析并指定聚为3类。 #导入库 impor…

大型 3D 互动开发和优化实践 | 京东云技术团队

开发背景 得益于“元宇宙”概念在前段时间的爆火&#xff0c;各家公司都推出了使用 3D 场景的活动或频道。 3D 场景相比传统的 2D 页面优点是多一个维度&#xff0c;同屏展示的内容可以更多&#xff0c;能完整的展示物体、商品的信息。 相应带来的缺点是用户使用方式改变&…

yolov8模型训练结果分析以及如何评估yolov8模型训练的效果

1.运行结果目录 一、 confusion_matrix_normalized.png和confusion_matrix.png 混淆矩阵 混淆矩阵以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。其中矩阵的行表示真实值&#xff0c;矩阵的列表示预测值。 TP&#xff08;True Positiv…

python 创建Django项目基础

一. 安装Django pip install django 默认安装最新版本二. 创建一个Django项目 三、运行项目 创建好Django项目后&#xff0c;我们就可以运行了 使用命令 python manage.py runserver四、目录结构 五、创建一个文件views用来存放方法 在创建的文件中写入以下方法 def sa…