STL helloworld程序和string容器讲解

本文详细介绍了如何使用STL(标准模板库)中的vector容器来存储和操作整数及自定义类型数据。通过push_back方法添加元素,并使用for_each遍历容器。此外,还展示了如何利用string容器进行字符串的赋值、遍历、拼接、查找、替换等操作。文章提供了丰富的代码示例,帮助读者深入理解STL的使用。
摘要由CSDN通过智能技术生成

用STL写一个简单的程序

本博客讲解了用STL的思想去写一个基本的程序,学习笔记写在了代码的注释中了

#include <iostream>
#include <vector>//动态数组 可变数组
#include<algorithm>//大部分算法都定义在这个头文件中
using namespace std;
//用到那个容器,就写那个容器的头文件

void print(int a)
{
	cout<<a<<" ";
}
void test01()
{
	vector<int> a;//模板参数,需要放什么类型的元素,想要放什么类型的元素,就设置成什么。这样定义一个容器,并且制定这个容器存放的类型是int;
	//既然有容器,那就应该有方法,例如插入删除增加
	
	a.push_back(10);//把这个10的元素放到这个容器的尾部
	a.push_back(20);//数据空间不足的话,自己会进行一个增长
	a.push_back(30);
	a.push_back(40);
	
	//容器提供迭代器
	//对此进行一个遍历,for_each();有两个参数,开始迭代器,和结束迭代器,和回调函数
	//容器提供迭代器,既然自己提供迭代器
	//a.begin()就自己返回了一个迭代器,先拿到迭代器的类型,容器在加加减减的过程中
	//也可以先拿到这个容器的迭代器类型,
	
	vector<int>::iterator pbegin = a.begin();//begin指向第一个元素
	
	vector<int>::iterator pend = a.end();//最后一个元素,
	
	for_each(pbegin,pend,print);//需要一个回调函数,可能存放基础的数据类型,也可能存放自定义的数据类型,每次调用我们的回调函数进行打印,
//对这个容器进行一个遍历,可以用for_each进行遍历
}
//容器也可以存放自定义的数据类型
//下面用容器来创建一个自定义类
class Person
{public:
	Person(int n=0, int a=0) :num(n), age(a) {}//用构造函数对成员列表进行初始化
public:
	int num, age;
};
void Test02() 
{
	//创建容器,并且制定容器的数据类型为Person
	vector<Person> v;
	Person p1(10, 20);
	Person p2(30, 40);
	v.push_back(p1);
	v.push_back(p2);//也可以使用这种方法增加容器中的元素

	for (vector <Person>::iterator it = v.begin(); it != v.end(); it++)//自己写一个遍历函数,创建一个变量it
	{
		cout << (*it).age << " " << (*it).num << endl;//*it可以*出现在指向迭代器指向的元素;

	}
}
void Test03()
{
	;
}
int main()
{
	test01();
	Test02();
	return 0;
}

string容器讲解

string容器常用的API

string 构造函数

string();//创建一个空的字符串 
string(const string& str);//使用一个string对象初始化另一个string对象
string(const char* s);//使用字符串s初始化
string(int n,char c);//使用n个字符c初始化

string赋值操作

string& operator=(const char* s);//char*类型字符串 赋值给当前的字符串
string& operator=(const string &s);//把字符串s赋值给当前的字符串
string& operator=(char c);//字符赋值给当前的字符串
string& assign(const char* s);//把字符串s赋值给当前的字符串
string& assign(const char* s,int n);//把字符串s的前n个字符赋值给当前的字符串
string& assign(const string &s);//把字符串s赋值给当前的字符串
string& assign(int n,char c);//用n个字符c赋值给当前字符串
string& assign(const string &s,int start,int n);//将s从start开始n个字符赋值给字符串

string 存取字符操作

char& operator[](int n);//通过【】方式取字符
char& at(int n);//通过at方法获取字符

string拼接操作

string& operator+=(const string& str);//重载+=运算符
string& operator+=(const char* str);//重载+=运算符
string& operator+=(const char c);//重载+=运算符
string& append(const char *s);//把字符串s连接到当前字符串结尾
string& append(const char *s,int n);//把字符串s的前n个字符连接到当前字符串结尾
string& append(const string &s);//同operator+=()
string& append(const string &s,int pos,int n);//把字符串s中从pos开始的n个字符连接到当前字符串结尾
string& append( int n,char c);//在当前字符串结尾添加n个字符c

string查找和替换

int find(const string& str,int pos = 0)const;//查找str第一次出现的位置,从pos开始查找
int find(const char* s,int pos = 0)const;//查找s第一次出现位置,从pos开始查找
int find(const char *s,int pos,int n)const;//从pos位置查找s的前n个字符第一次位置
int find(const char c,int pos = 0)const;//查找字符c第一次出现位置
int rfind(const string& str, int pos = npos)const;//查找str最后一次出现位置,从pos开始查找
int rfind(const char* s,int pos = npos)const;//查找s最后一次出现位置,从pos开始查找
int rfind(const char* s,int pos,int n )const;//从pos查找s的前n个字符最后一次位置
int rfind(const char c,int pos = 0)const;//查找字符c最后一次出现位置
string& replace(int pos,int n,const string& str);//替换从pos开始的n个字符为字符串str
string& replace(int pos,int n,const char* s);//替换从pos开始的n个字符为字符串s

string比较操作

int compare(const string &s)const;//与字符串s比较
int compare(const char*s)const;//与字符串s比较

string字串截取

string substr(int pos = 0,int n = npos)const;//返回由pos开始的n个字符组成的字符串

string插入和删除操作

string& insert(int pos,const char* s);//插入字符串
string& insert(int pos,const string &str);//插入字符串
string& insert(int pos,int n,char c);//在指定位置插入n个字符c
string& erase(int pos,int n = npos);//删除从pos开始的n个字符

对上面API进行的代码试验

在运行代码时,请自己改变一下Test0x()的x数值,进行各个函数的调控

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
void Test01()
{
	char c[] = "asda";
	string a = "asda";
	string b;
	//string 提供了一个成员方法进行赋值
	b.assign("asdasd");
	//string b = as;//把字符串赋值给当前字符串
	cout << b;
}
void Test02()
{
	string s1 = "asdasdasdfd";
	for (int i = 0; i < s1.size(); i++)
	{
		cout << s1[i] << " ";
	}
	cout << endl;
	//at成员函数
	for (int i = 0; i < s1.size(); i++)
	{
		cout << s1.at(i);
	}

	//[]方式如果访问越界了,直接挂点了
	//如果at访问失败了,他会进行抛异常
	try 
	{
		cout << s1.at(100);
		//out << s1[100];可以对这两行代码进行分别测试,可以发现at方法会进行抛出异常
	}
	catch(...)
	{
		cout << "YOU are sb";
	}
}
//拼接操作
void Test03()
{
	string s = "I love you ";
	s += "asd";
	string s3 = "222";
	s.append(s3);//这个成员方法是把s3添加到s的尾部
	string s4 = s + s3;
	cout <<s4;
}
//查找操作
void Test04()
{
	string s = "abcdegfjlf";
	int pos=s.find("f");//查找f第一次出现的位置
	cout << pos;
	int pos2 = s.rfind("f");//查找f最后一次出现的位置
	int pos3 = s.find("asfsadgfsgadsfas");
	cout << pos3;//如果没有的话会返回-1;
	cout << pos2;
}
//替换操作
void Test05()
{
	string s = "abcdefg";
	s.replace(0, 2, "123");//把ab替换成了123,第0个位置到第2个位置

	cout << s;
}
//字符串比较
void Test06()
{
	string s1 = "abcd";
	string s2 = "abcdef";
	//比较的时候按照ASCII码进行比较
	//大于时返回1,等于时返回0,小于时返回-1;
	if (s1.compare(s2) == 0)
	{
		cout << "sad";
	}
}
//子串操作
void Test07()
{
	string s = "abcdefg";
	string my=s.substr(1, 4);//截取从1到4的字符串
	cout << my;
}
//字符串的插入和删除
void Test08()
{
	string s = "asdasdasdfa";
	s.insert(3, "111");//插入字符串,从第三个前面插入
	cout << s;

	s.erase(0, 2);//指定区间删除
	cout << s;
}
int main()
{
	Test07();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值