【STL】string类 (上)& <vector>和<list>的简单使用

这篇具有很好参考价值的文章主要介绍了【STL】string类 (上)& <vector>和<list>的简单使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一,什么是 STL 

二,STL 的六大组件

三,标准库中的 string 类

1,string 类 

2,string 类的常用接口

1,string类对象的常见构造

2,string(const string& str)

3,string (const string& str, size_t pos, size_t len = npos);

4,string (const char* s )

5,string (const char* s,size_t n);

6,string (size_t n,char c);

3,遍历和访问

四,iterator 迭代

五,逆置字符串 reverse

六, 栈

七,队列


【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

一,什么是 STL 

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

二,STL 的六大组件

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

三,标准库中的 string 类

string 类的介绍:

https://cplusplus.com/reference/string/string/?kw=string

1,string 类 

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

总结:

1,string 是表示字符串的字符串类

2,该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作 string 的常规操            作。

3,string 在底层实际是:basic_string 模板类的别名,typedef basic_string string;

4,不能操作多字节或者变长字符的序列。

在使用 string 类时,必须包含 #include 头文件以及 using namespace std;

2,string 类的常用接口

1,string类对象的常见构造

详情:cplusplus.com/reference/string/string/string/

函数名称 功能说明
string() 构造空的 string 类对象,即空字符串
string(const string& str) 拷贝构造函数
string (const string& str, size_t pos, size_t len = npos);
截取从 pos 开始 npos 长度的字符串
string (const char* s ); 用C-string 来构造 string 类对象
string (const char* s,size_t n); 截取字符串前 n 个字符
string (size_t n,char c);

string 类对象中包含 n 个字符c

2,string(const string& str)

拷贝构造函数

#include<iostream>
#include<string>
using namespace std;

int main()
{
	string s1 = "abc";
	string s2(s1);
	cout << s2 << endl;
	return 0;
}

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

记得加上头文件  #include<string> ;

3,string (const string& str, size_t pos, size_t len = npos);

截取从 pos 开始 npos 长度的字符串

int main()
{
	string s1 = "hello world";
	string s3 (s1, 2, 5);
	cout << s3 << endl;
	
	string s4(s1, 0, 10);
	cout << s4 << endl;

	string s5(s1, 3);
	cout << s5 << endl;

	return 0;
}

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

第一个数:目标字符串

第二个数:代表下标,从下标位置开始;

第三个数:代表长度,如果没写的话就一直读取到 ' \0 ' 为止;

4,string (const char* s )

用C-string 来构造 string 类对象

int main()
{
	string s1("hello world");
	cout << s1 << endl;

	string s2("hahaha 666");
	cout << s2 << endl;
	return 0;
}

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

5,string (const char* s,size_t n);

截取字符串前 n 个字符

int main()
{
	string s1("hello world",5);
	cout << s1 << endl;

	string s2("hahaha 666",2);
	cout << s2 << endl;
	return 0;
}

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

第一个数:要写双引号字符串形式的,要不然会和string (const string& str, size_t pos, size_t                      len = npos);起冲突;

第二个数:代表读取的个数,从头开始;

6,string (size_t n,char c);

string 类对象中包含 n 个字符c

int main()
{
	string s1(10,'x');
	cout << s1 << endl;

	string s2(5,'a');
	cout << s2 << endl;
	return 0;
}

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

3,遍历和访问

int main()
{
	string s1("hello world");
	cout << s1.size() << endl;
	cout << s1.length() << endl;

	int i = 0;
	for (i = 0; i < s1.size(); i++)
	{
		cout << s1[i] <<" ";
	}

	return 0;
}

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

s1.size() 和 s1.length 是求字符串长度的;

访问时可以直接像数组一样用 [ 下标 ] 的形式;

四,iterator 迭代

string 类给我们提供了一个 迭代 iterator,来帮助我们进行遍历;

int main()
{
	string s1("hello world");
	string::iterator it = s1.begin();
	while (it != s1.end())
	{
		cout << *it << " ";
		it++;
	}

	return 0;
}

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

string::iterator 是一个类型,it 可以把它看作是一个指针;

s1.begin() 就是相当于第一个元素的指针地址,s1.end() 相当于最后 \0 的地址;

五,逆置字符串 reverse

我们先来逆置一个字符串

int main()
{
	string s1("hello world");
	int begin = 0, end = s1.size()-1;
	while (begin< end)
	{
		int tmp = s1[begin];
		s1[begin] = s1[end];
		s1[end] = tmp;
		begin++;
		end--;
	}
	cout << s1 << endl;
	return 0;
}

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

 reverse 逆置字符串

int main()
{
	string s1("hello world");
	reverse(s1.begin(), s1.end());
	cout << s1 << endl;
	return 0;
}

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

是不是简单多了;

六,<vector> 栈

我们写栈再也不用手搓了,直接用c++库里面的栈就可以了,需要包含头文件 #include<vector>;

int main()
{
	vector<int> s1;
	s1.push_back(1);
	s1.push_back(2);
	s1.push_back(3);
	s1.push_back(4);
	s1.pop_back();

	vector<int>::iterator st = s1.begin();
	while (st != s1.end())
	{
		cout << *st << " ";
		st++;
	}
	return 0;
}

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

而且迭代 iterator 对栈也一样有用;

对逆置函数 reverse 也一样有效果;

int main()
{
	vector<int> s1;
	s1.push_back(1);
	s1.push_back(2);
	s1.push_back(3);
	s1.push_back(4);
	s1.pop_back();
	reverse(s1.begin(), s1.end());

	vector<int>::iterator st = s1.begin();
	while (st != s1.end())
	{
		cout << *st << " ";
		st++;
	}
	return 0;
}

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

七,队列 <list>

我们以后也不用手搓队列了,c++库里面也有队列,我们直接用即可,需要包含头文件 #include<list>;

int main()
{
	list<int> sl;
	sl.push_back(1);
	sl.push_back(2);
	sl.push_back(3);
	sl.push_back(4);
	sl.pop_back();
	
	list<int>::iterator lt = sl.begin();
	while (lt != sl.end())
	{
		cout << *lt << " ";
		lt++;
	}
	return 0;
}

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

也是一样的用法,也同样适用于 迭代 iterator;

逆置 reverse 函数也是OK的;

int main()
{
	list<int> sl;
	sl.push_back(1);
	sl.push_back(2);
	sl.push_back(3);
	sl.push_back(4);
	sl.pop_back();
	
	reverse(sl.begin(), sl.end());

	list<int>::iterator lt = sl.begin();
	while (lt != sl.end())
	{
		cout << *lt << " ";
		lt++;
	}
	return 0;
}

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法

【STL】string类 (上)& <vector>和<list>的简单使用,C++,c++,开发语言,数据结构,list,算法文章来源地址https://www.toymoban.com/news/detail-757175.html

到了这里,关于【STL】string类 (上)& <vector>和<list>的简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • [STL-list]介绍、与vector的对比、模拟实现的迭代器问题

     list的底层是 带头双向链表 结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。 与其他的序列式容器相比(array,vector,deque),list通常 在任意位置进行插入、移除元素的执行效率更好 list最大的缺陷是 不支持任意位

    2024年04月15日
    浏览(65)
  • 【C++入门】STL容器--vector底层数据结构剖析

    目录  前言  1. vector的使用       vector的构造  vector迭代器  vector空间相关的接口  vector 功能型接口  find  swap  insert  erase 2. vector内部数据结构剖析 reserve  push_back和pop_back size、capacity、empty、operator[ ];  insert和erase resize swap  拷贝构造和赋值重载 构造函数补充  迭代器

    2024年01月25日
    浏览(38)
  • 【C++】反向迭代器的模拟实现通用(可运用于vector,string,list等模拟容器)

    🌏博客主页: 主页 🔖系列专栏: C++ ❤️感谢大家点赞👍收藏⭐评论✍️ 😍期待与大家一起进步! 我们要写出一个通用的反向迭代器模拟而且在保证代码简介不繁琐的的情况下,一定程度上使用我们自己模拟的已经封装好的iterator迭代器可以简化许多步骤,首先我们要知

    2024年02月14日
    浏览(42)
  • yo!这里是STL::string类简单模拟实现

    目录 前言 常见接口模拟实现 默认成员函数 1.构造函数 2.析构函数 3.拷贝构造函数 4.赋值运算符重载 迭代器 简单接口 1.size() 2.c_str() 3.clear() 操作符、运算符重载 1.操作符[] 2.运算符== 3.运算符 扩容接口 1.reserve() 2.resize() 增删查改接口 1.push_back() 2.append() 3.运算符+= 4.insert() 5.

    2024年02月15日
    浏览(35)
  • 【数据结构与算法】C++的STL模板(迭代器iterator、容器vector、队列queue、集合set、映射map)以及算法例题

    更多算法例题链接: 【数据结构与算法】递推法和递归法解题(递归递推算法典型例题) 什么是迭代器(iterator) 迭代器(iterator)的定义: 迭代器是一种检查容器内元素并遍历元素的数据类型。 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。 容器

    2024年04月14日
    浏览(37)
  • yo!这里是STL::list类简单模拟实现

    目录 前言 重要接口实现 框架 默认成员函数 迭代器(重点) 1.引言 2.list迭代器类实现  3.list类中调用实现  增删查改 后记         我们知道,stl中的vector对应数据结构中的顺序表,string类对应字符串,而今天要讲的list类对应带头双向链表,并不是对应单链表,带头双向链

    2024年02月13日
    浏览(29)
  • 【STL】vector的使用

    目录 前言 默认成员函数 构造函数 拷贝构造 赋值重载 迭代器 正向迭代器 反向迭代器 容量管理 查看容量和大小 扩容 判空 访问数据 下标访问 边界访问 数据修改 尾插尾删 指定位置插入删除 迭代器失效  清空 ​编辑 交换 查找数据 vector可以代替string吗 讲完string和string的模

    2024年02月05日
    浏览(34)
  • C++ [STL之vector的使用]

    本文已收录至《C++语言》专栏! 作者:ARMCSKGT vector是可变大小的数组序列容器,一般也叫向量;底层原理是顺序表,但是vector是泛型容器,可以支持int,double甚至自定义类型的存储,在平时应用非常频繁且广阔,vector在很多场景下可以提高我们的开发效率,所以学习vector这一

    2024年02月06日
    浏览(35)
  • C++【STL】之vector的使用

    vector是表示可变大小数组的序列容器。 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。 本质讲,vector使用动态分

    2024年02月09日
    浏览(42)
  • C++ STL学习之【vector的使用】

    ✨个人主页: Yohifo 🎉所属专栏: C++修行之路 🎊每篇一句: 图片来源 The power of imagination makes us infinite. 想象力的力量使我们无限。 vector 是表示可变大小数组的序列 容器 ,其使用的是一块 连续 的空间,因为是动态增长的数组,所以 vector 在空间不够时会扩容; vector 优点

    2023年04月09日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包