【C++ STL之string,tuple,array详解】

这篇具有很好参考价值的文章主要介绍了【C++ STL之string,tuple,array详解】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.string字符串

1.简介

在C++的STL(Standard Template Library)中,std::string是一个非常有用的字符串类。它提供了一系列操作字符串的功能,包括字符串的创建、修改、查找、拼接等。本文将详细介绍C++ STL中std::string的使用方法和一些常见操作。

2.头文件及初始化

//头文件
#include<string>
//初始化
//1.使用赋值运算符 = 或拷贝构造函数进行初始化:
string str1 = "Hello";         // 使用赋值运算符 =
string str2(str1);             // 使用拷贝构造函数
string str3 = str2;            // 使用赋值运算符 =
//2.使用字符串字面值进行初始化:
string str ("Hello, World!");   // 使用字符串字面值
//3.使用重复字符进行初始化
string str(5, 'A');             // 使用重复字符
//4.
string str6(str2, 2); //结果为"3456789",截取第三个元素(2对应第三位)到最后
//5.
string str3("12345", 0, 3);//结果为"123" ,从0位置开始,长度为3
//6.
string str4("123456", 5); //结果为"12345" ,长度为5

3.特性

(1)支持比较运算符
string字符串支持常见的比较操作符(>,>=,<,<=,==,!=),支持string与C-string的比较(如 str < ”hello”)。
在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按 字典顺序 进行逐一得 比较。字典排序靠前的字符小, 比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小(前面减后面) 同时,string (“aaaa”) <string(aaaaa)。
(2)支持+运算符,代表拼接字符串
string字符串可以拼接,通过"+"运算符进行拼接

string s1;
string s2;`在这里插入代码片`
s1 = "123";
s2 = "456";
string s = s1 + s2;
cout<<s;   //123456

(3)读取字符串时注意事项

int n;
string s;
cin>>n;
getchar();//cin.get()
getline(cin,s);//可正确读入下一行的输入

解释:cin遇到回车停止后,回车还在输入流中,所以需要getchar()或者cin.get()来读取换行符,再用getline()读取。

(4)string和char之间的转换
可以用c_str()来进行转换

string s = "xing ma qi";
char s2[] = s.c_str();

(5)排序

sort(s.begin(),s.end());//按照ASCII码排序

4.基本操作

基本的功能包括
获取字符串长度,插入,删除,替换,查找,大写转小写,提取
(1)获取字符串长度

代码 含义
s.length() 或者s.size() 返回string对象的字符个数,他们执行效果相同。

(2)插入

代码 含义
s.push_back() 在末尾插入字符
s.insert(pos,element) 在pos位置插入element
s.append(str) 在s字符串结尾添加str字符串

(3)删除

代码 含义
erase(iterator p) 删除字符串中p所指的字符
erase(iterator first, iterator last) 左闭右开的区间删
erase(pos, len) 删除字符串中从索引位置pos开始的len个字符
clear() 删除字符串中所有字符

(4)字符替换

代码 含义
s.replace(pos,n,str) 把当前字符串从索引pos开始的n个字符替换为str
s.replace(pos,n,n1,c) 把当前字符串从索引pos开始的n个字符替换为n1个字符c
s.replace(it1,it2,str) 左闭右开替换为str

(5)大写转小写

代码 含义
tolower() 转小写
toupper() 转大写

通过transform进行转换

string s;
transform(s.begin(),s.end(),s.begin(),::tolower);//转换小写
transform(s.begin(),s.end(),s.begin(),::toupper);//转换大写

(6)提取字符串

代码 含义
s.sunstr(pos,n) 截取从pos索引开始的n个字符

(7)查找
对于查找的函数,为便于理解,这里直接上代码

int main()
{
    string s("dog bird chicken bird cat");
//字符串查找-----找到后返回首字母在字符串中的下标
// 1. 查找一个字符串
    cout << s.find("chicken") << endl;// 结果是:9
// 2. 从下标为6开始找字符'i',返回找到的第一个i的下标
    cout << s.find('i',6) << endl;// 结果是:11
// 3. 从字符串的末尾开始查找字符串,返回的还是首字母在字符串中的下标
    cout << s.rfind("chicken") << endl;// 结果是:9
// 4. 从字符串的末尾开始查找字符
    cout << s.rfind('i') << endl;// 结果是:18因为是从末尾开始查找,所以返回第一次找到的字符



// 5. 在该字符串中查找第一个属于字符串s的字符
    cout << s.find_first_of("13br98") << endl;// 结果是:4---b
// 6. 在该字符串中查找第一个不属于字符串s的字符------先匹配dog,然后bird匹配不到,所以打印4
    cout << s.find_first_not_of("hello dog 2006") << endl; // 结果是:4
    cout << s.find_first_not_of("dog bird 2006") << endl;  // 结果是:9
// 7. 在该字符串最后中查找第一个属于字符串s的字符
    cout << s.find_last_of("13r98") << endl;// 结果是:19
// 8. 在该字符串最后中查找第一个不属于字符串s的字符------先匹配t--a---c,然后空格匹配不到,所以打印21
    cout << s.find_last_not_of("teac") << endl;// 结果是:21
}

二.tuple元组

1.简介

在C++的STL(Standard Template Library)中,std::tuple是一个非常有用的模板类。它提供了一种将多个值组合在一起的方式,类似于一个元组。std::tuple可以用于存储和传递多个不同类型的值,而不需要定义新的数据结构。本文将详细介绍C++ STL中std::tuple的使用方法和一些常见操作。

2. 头文件及初始化

//头文件
#include <tuple>
tuple<Type1, Type2, ..., TypeN> myTuple; // 声明一个空的tuple
tuple<Type1, Type2, ..., TypeN> myTuple(value1, value2, ..., valueN); // 使用给定的值初始化
tuple<Type1, Type2, ..., TypeN> myTuple = make_tuple(value1, value2, ..., valueN); // 使用make_tuple函数创建tuple并赋值

3.访问和修改元素

可以使用以下方式访问和修改tuple中的元素:

get<Index>(myTuple); // 访问指定索引的元素
get<Index>(myTuple) = newValue; // 修改指定索引的元素

4.使用tuple作为函数返回值

tuple可以用作函数的返回值,以便一次返回多个值。例如:

tuple<int, double, string> myFunction() {
    int intValue = 10;
    double doubleValue = 3.14;
    string stringValue = "Hello";
    return make_tuple(intValue, doubleValue, stringValue);
}
int main() {
    auto result = myFunction();
    int intValue = get<0>(result);
    double doubleValue = get<1>(result);
    string stringValue = get<2>(result);
    // 使用返回的值进行后续操作
    // ...
    return 0;
}

上述示例代码中,我们定义了一个函数myFunction(),它返回一个tuple,其中包含一个整数、一个双精度浮点数和一个字符串。
在main()函数中,我们调用myFunction()并使用get(tuple)来访问返回的元组中的值。

三.array数组

1.简介

在C++的STL(Standard Template Library)中,std::array是一个非常有用的容器类。它提供了一种固定大小的数组,可以在运行时进行访问和修改。std::array的大小在编译时确定,并且具有固定的内存布局。本文将详细介绍C++ STL中std::array的使用方法和一些常见操作。

2.头文件及初始化

#include <array>
//可以使用以下方式声明和初始化一个array对象:
array<Type, Size> myArray; // 声明一个空的array
array<Type, Size> myArray = {element1, element2, ..., elementN}; // 使用已有的元素初始化array
array<Type, Size> myArray = {value}; // 使用单个值初始化array,会将所有元素初始化为该值
//声明一个大小为100的int型数组,初始值均为0(初始值与默认元素类型等效)
array<int, 100> a{};
//声明一个大小为100的int型数组,初始化部分值,其余全部为0
array<int, 100> a{1, 2, 3};

对于一些高级数据类型

array<string, 2> s = {"ha", string("haha")};
array<node, 2> a;

3.元素的访问

(1)下标访问

array<int, 4> a = {1, 2, 3, 4};
for(int i = 0; i < 4; i++) 
    cout << a[i] << " \n";

(2)智能指针

for(auto i : a)
    cout << i << " ";

(3)迭代器访问

auto it = a.begin();
for(; it != a.end(); it++) 
    cout << *it << " ";

(4)at()函数访问

array<int, 4> a = {1, 2, 3, 4};
int res = a.at(1) + a.at(2);
cout << res << "\n";

(5)get方式访问
将a数组下标为1位置处的值改为x

get<1>(a) = x;

4.基本操作

代码 含义
begin() 返回容器中第一个元素的访问迭代器(地址)
end() 返回容器最后一个元素之后一个位置的访问迭代器(地址)
rbegin() 返回最后一个元素的访问迭代器(地址)
rend() 返回第一个元素之前一个位置的访问迭代器(地址)
size() 返回容器中元素的数量,其值等于初始化 array 类的第二个模板参数N
empty() 判断容器是否为空
at(n) 返回容器中 n 位置处元素的引用,函数会自动检查 n 是否在有效的范围内,如果不是则抛出 out_of_range 异常
front() 返回容器中第一个元素的直接引用,函数不适用于空的 array 容器
back() 返回容器中最后一个元素的直接引用,函数不适用于空的 array 容器。
data() 返回一个指向容器首个元素的指针。利用该指针,可实现复制容器中所有元素等类似功能
fill(x) 将 x 这个值赋值给容器中的每个元素,相当于初始化
array1.swap(array2) 交换 array1 和 array2 容器中的所有元素,但前提是它们具有相同的长度和类型

对于部分功能给出代码帮助理解
下面是data()函数在array中的用法示例

#include <iostream>
#include <array>
int main() {
    std::array<int, 5> arr = {1, 2, 3, 4, 5};
    int* ptr = arr.data(); // 获取指向数组数据的指针
    for (int i = 0; i < arr.size(); i++) {
        std::cout << ptr[i] << " "; // 输出数组元素
    }
    std::cout << std::endl;
    return 0;
}

排序文章来源地址https://www.toymoban.com/news/detail-662716.html

sort(a.begin(), a.end());

到了这里,关于【C++ STL之string,tuple,array详解】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++深入浅出】STL之string用法详解

    目录 一. 前言 二. STL概要 2.1 什么是STL 2.2 STL的六大组件 2.3 STL的缺陷 三. string类概述 3.1 什么是string类 3.2 为什么要使用string类 四. string类的使用 4.1 包含头文件 4.2 构造函数 4.3 赋值运算符重载 4.4 容量操作 4.5 访问/遍历操作 4.6 查找修改操作 4.7 子串操作 ​4.8 非成员函数  

    2024年02月05日
    浏览(53)
  • 【C++初阶】STL详解(二)string类的模拟实现

    本专栏内容为:C++学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C++。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C++ 🚚代码仓库:小小unicorn的代码仓库🚚 🌹🌹🌹关注我带你学习编程知识 注:为了防止与标准库当中的string类产生命名冲

    2024年02月05日
    浏览(58)
  • c++标准模板(STL)(std::array)(三)

    template     class T,     std::size_t N struct array; (C++11 起   std::array 是封装固定大小数组的容器。 此容器是一个聚合类型,其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数组,它不会自动退化成 T* 。它能作为聚合类型聚合初始化,只要

    2024年02月02日
    浏览(48)
  • 算法竞赛STL:array的使用方法

    array 容器描述 : array 是一种固定大小的容器,它包含指定数量的元素。每个元素都有一个非负整数索引,用于访问或修改它。 使用方法 : 首先,你需要包含头文件 #include array ,然后声明一个 array 对象,如 std::arrayint, 5 a; 。这将创建一个可以存储5个整数的 array 。 底层实现

    2024年02月22日
    浏览(41)
  • 【c++】STL--string

            最开始我们学习c语言的时候,我们发现刷题或者写代码都是比较麻烦的,如果说用c语言造一辆车,那么我需要用c语言先把轮子造好--各个零件,当我们造好之后再组装。那么c++则是造好了轮子,只需要我们组装就好了。这里的的STL里有各个组件,我只要熟悉的掌握

    2024年02月03日
    浏览(49)
  • C++ STL string类

    目录 一.为什么学习string类 (1) C语言中的字符串 (2)标准库里面的string类 二. string类的常用接口说明 (1)string类对象的常见构造 (2)string类对象的容量操作 1.size(),length(). 2. capacity() 3.empty()  4.clear()  5.reserve()  6.resize() (3)string类对象的访问及遍历操作  1.operator[ pos

    2024年02月13日
    浏览(36)
  • 【C++ • STL】探究string的源码

    ヾ(๑╹◡╹)ノ\\\" 人总要为过去的懒惰而付出代价 ヾ(๑╹◡╹)ノ\\\" 浅拷贝 :也称位拷贝,编译器只是将对象中的值拷贝过来。如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放,

    2024年02月08日
    浏览(43)
  • 【C++精华铺】9.STL string

    目录 1. string类的优势 2. string类的常用接口 2.1 常用构造 1. 空串构造:string(); 2. C串构造:string(const char* s); 3. 拷贝构造:string(const string str); 4. 字符填充构造:string(size_t n, char c); 5. 迭代器构造:string(InputIterator first, InputIterator last); 2.2  string容量操作 1. size_t size(),size_t length

    2024年02月11日
    浏览(36)
  • C++ [STL之string的使用]

    本文已收录至《C++语言》专栏! 作者:ARMCSKGT 字符串在程序中经常出现,C语言为此提供了很多字符串操作函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问,于是STL单独为字符串实现了一个容器,

    2024年02月01日
    浏览(35)
  • C++ STL string类模拟实现

    目录 string类成员变量 一.构造函数 二.析构函数 三.拷贝构造 四.size(),capacity() 五.operator [ ] 六. operator =  七.字符串比较  八.reserve() 九.push_back(),append() 十.operator+=  十一.insert()  十二.迭代器  十二.erase() 十三.swap()  十四.find() 十五.流提取,流输出 十六

    2024年02月14日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包