保研机试准备(基础语法篇)

本文介绍了C++中Vector库的一维和二维定义、元素访问、常用函数如push_back(),pop_back(),size()等;set库的定义、元素访问和常用函数如insert(),erase(),find()等;math.h库和string.h库中的常用函数。
摘要由CSDN通过智能技术生成

由于前段时间做一些算法题目时发现C++一些基本的标准库还是挺有用的,但是我对一些库还不是太了解,所以最近准备开一个新的专题,记录一些C++基本的语法以及有用的库函数。

这篇博客也会不定期更新。

直接上干货:

目录

Vector库

定义

元素访问

vector常用函数

set()库

定义

访问set元素

set常用函数

math.h库

引用

常用函数

string.h库

引用

string类型

定义

string类型的访问

string转为字符数组

字符数组转为string

string常用函数


Vector库

定义

定义一维vector数组:

vector<typename> name;
//例子
vector<int> name;
vector<double> name;
vector<char> name;

定义二维vector数组:

//第一种写法
vector<int> name[100];
//第二种写法
vector<vector <int>> name;

元素访问

1.通过下标访问

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

2.通过迭代器访问

	//迭代器访问
	//迭代器it指向name的首地址
	vector<int> ::iterator it = name.begin();
	for (int i = 0; i < name.size(); i++)
	{
		cout << *(it + i) << ' ';
	}

begin() 和end()函数:

begin()是取vector的首元素地址,但是end()则不是取尾元素地址,而是取尾元素地址的下一个地址。end()作为迭代器的末尾标志,不储存任何元素。

尾部地址遍历:

	for (vector<int>::iterator it = name.begin(); it != name.end(); it++) {
		cout << *it << ' ';
	}

vector常用函数

push_back()

push_back(x)在vector尾部添加一个元素x

	//动态添加元素
	for (int i = 0; i < 10; i++) name.push_back(i);

pop_back()

pop_back()用以删除vector的尾元素

	 //尾部删除元素
	name.pop_back()

size()

size()用来获得vector中元素的个数

一般用法:

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

insert()

insert(it, x) 用来向vector的任意迭代器it处插入一个元素x

	//任意位置插入元素
    //在name[1]的位置插入2
	name.insert(name.begin()+1, 2);

erase()

erase()有两种用法:删除单个元素、删除一个区间内的所有元素。

1.删除单个元素:erase(it) 即删除迭代器为it 处的元素

	//0123456789
    for (int i = 0; i < 10; i++) name.push_back(i);

	//删除任意位置的元素
    //这里删除的是name[2]处的元素,也就是2
	name.erase(name.begin() + 2);

	for (auto i:name) cout << i;
	cout << endl;

2.删除一个区间内的所有元素,erase(first, last), 即删除[first, last)内的所有元素,注意,不包括last

	for (int i = 0; i < 10; i++) name.push_back(i);

	//删除任意位置的元素
    //删除的是name[1]、name[2]处的元素
	name.erase(name.begin() + 1,name.begin()+3);

	for (auto i : name) cout << i;
	cout << endl;

要想删除所有元素可以使用erase(name.begin(),name.end())或者name.clear()

	for (int i = 0; i < 10; i++) name.push_back(i);

	//删除任意位置的元素
	name.erase(name.begin(), name.end());
	//name.clear();

	for (auto i : name) cout << i;
	cout << endl;

set()库

添加头文件:#include<set>

定义

定义set():

set<int> name;
set<double> name;
set<char> name;

定义set()数组:

这样a[0] ~ a[99] 中的每一个都是一个set容器。

set<int> a[100];

访问set元素

set只能通过迭代器(iterator)访问

除了vector 和 string 之外的STL容器都不支持*(it + i) 的访问方式

	//访问set元素
	for (set<int>::iterator it = st.begin(); it != st.end(); it++) {
		cout << *it << ' ';
	}

set常用函数

insert()

insert(x),将x插入set容器中,并自动递增排序和去重,注意insert()和vector中用法的不同。

	for (int i = 0; i < 10; i++)
	{
		st.insert(i);
	}

find()

find(value), 返回set中对应值为value的迭代器。

	cout << *(st.find(20));

erase()

erase()有两种用法:删除单个元素、删除一个区间内的所有元素

1.删除单个元素:删除单个元素也有两种方法

方法一:st.erase(it), it为所需要删除元素的迭代器。结合find()函数来使用。

	//删除元素
	//用find方法找到2然后删除它
	st.erase(st.find(2));

方法二:st.erase(value), value为所需要删除元素的值。

	//直接删除2
	st.erase(2);

2.删除一个区间内的所有元素:st.erase(first, last)可以删除一个区间内的所有元素,其中first为所需要删除区间的起始迭代器,而last则为所需要删除区间的末尾迭代器的下一个地址,即为删除[first, last),注意,不包括last。 

	// 删除一个区间
    // 删除的是2,3,4
	st.erase(st.find(2), st.find(5));

	for (set<int>::iterator it = st.begin(); it != st.end(); it++) {
		cout << *it << ' ';
	}

删除全部元素

	//删除全部元素
	st.erase(st.begin(), st.end());

	for (set<int>::iterator it = st.begin(); it != st.end(); it++) {
		cout << *it << ' ';
	}

size()

size()用来获得set内的元素个数

	//set的尺寸
	cout << st.size();

clear()

clear()用来清空set中的所有元素

	//删除全部元素
	st.clear();

	for (set<int>::iterator it = st.begin(); it != st.end(); it++) {
		cout << *it << ' ';
	}

math.h库

引用

#include<math.h>

常用函数

fabs(double x)

该函数用于对double 型变量取绝对值。

	int a = -2;
    // 输出2
	cout<< fabs(a);

pow(double r,double p)

该函数用于返回 r ^ p ,要求r 和 p 都是double类型

	//开方
	double a = 3;
	double b = 4;
	cout<< pow(3, 4);

sqrt(double x)

该函数用于返回double型变量的算数平方根

string.h库

引用

#include<string.h>

strlen()

strlen()函数可以得到字符数组中第一个\0之前的字符的个数

	char a[] = "abcd";
	cout<< strlen(a);

strcmp()

strcmp()函数返回两个字符串大小的比较结果,比较原则是按字典序,所谓字典序就是字符串在字典中的顺序,因此如果有两个字符数组str 1 和 str 2, 且满足str 1[0...k - 1] == str 2[0...k - 1]、str1[k] < str2[k], 那么就说str 1的字典序小于str2。例如"a" 的字典序小于"b"、"aaaa" 的字典序小于"aab"

strcmp()函数的返回值:

  • 如果字符数组1 < 字符数组2,则返回一个负整数(不一定是-1,由编译器决定)
  • 如果字符数组1 == 字符数组2,则返回0
  • 如果字符数组1 > 字符数组2,则返回一个正整数(不一定是1,由编译器决定)
	char s1[] = "abcd";
	char s2[] = "abce";
	cout<< strcmp(s1, s2);

strcpy()

strcpy()函数可以把一个字符串复制给另一个字符串

strcpy(字符数组1,字符数组2);

把字符数组2复制给字符数组1

“复制” 也包括了结束标志\0 

	char s1[50] = "jdsaiosdi";
	char s2[50] = "fjwio;ahf;ndilafcnads;ojcsda;c";
	//微软担心会溢出所以改写了函数
	cout<< strcpy_s(s1,s2);
	cout << s1;

strcat()

strcat()可以把一个字符串拼接到另一个字符串的后面

strcat(字符数组1, 字符数组2);

把字符数组2拼接到字符数组1的后面

	//字符串拼接
	char s1[50] = "jdsaiosdi";
	char s2[50] = "fjwio;ahf;ndilafcnads;ojcsda;c";
	//微软担心会溢出所以改写了函数
	strcat_s(s1, s2);
	cout << s1;

string类型

定义

string str;

string类型的访问

1.通过下标访问

	for (int i = 0; i < ss.length(); i++)
	{
		cout << ss[i];
	}

2.通过迭代器访问

	//迭代器访问
	for (string::iterator it=ss.begin();it!=ss.end();it++)
	{
		cout << *it << ' ';
	}

string转为字符数组

c_str()

	//string转为字符数组
	string ss = "abcde";
	char a[50];
	strcpy_s(a, ss.c_str());
	strlen(ss.c_str());
	cout << a <<endl;

字符数组转为string

	//字符数组转为string
	string s1 = a;
	cout << s1 << endl;

string常用函数

operator+=

这是string的加法,可以将两个string直接拼接起来

compare operator(比较操作符)

两个string类型可以直接使用==、!=、<、<=、>、>=比较大小,比较规则是字典序。

length() / size()

length()返回string的长度,即存放的字符数。size()与length()基本相同。

insert()

tring的insert()函数有很多种写法,这里给出几种常用的写法:

1.insert(pos, string), 在pos号位置插入一个字符串string

	string ss = "abcde";
	ss.insert(2, "fsj");

2.insert(it, it2, it3), it 为原字符串的欲插入位置,it2 和 it3 为待插字符串的首尾迭代器,用来表示串[it2, it3)将被插在it 的位置上。

	string s1 = "abcde";
	string s2 = "fsjfsjfsj";
	s1.insert(s1.begin() + 3, s2.begin() + 2, s2.begin() + 6);
	cout << s1;

erase()

erase()有两种用法:删除单个元素、删除一个区间内的所有元素。

1.删除单个元素:str.erase(it) 用于删除单个元素,it为需要删除的元素的迭代器

	string s1 = "abcde";
	s1.erase(s1.begin()+2);
	cout << s1;

2.删除一个区间内的所有元素:有两种方法:

  • str.erase(first, last), 其中first为需要删除的区间的起始迭代器,而last为需要删除的区间的末尾迭代器的下一个地址,即为删除[first, last)
  • str.erase(pos, length), 其中pos为需要开始删除的起始位置,length为删除的字符个数。
	string s1 = "abcdeabcde";
	//方法1:
	s1.erase(s1.begin() + 2, s1.begin() + 5);
	cout << s1;
	//方法2:
	s1.erase(2, 3);
	cout << s1;

clear()

clear()可以清空string中的数据

substr()

substr(pos, len) 返回从pos号位开始、长度为len的子串。

	string s1 = "abcdeabcde";
	string s2 = s1.substr(2, 3);
	cout<< s2;

find()

str.find(str2) 当str2 是str 的子串时,返回其在str 中第一次出现的位置,如果str2 不是str 的子串,那么返回string::npos。

str.find(str2, pos), 从str 的pos 号位开始匹配str2,返回值与上相同。时间复杂度为O(M*N),M和N 分别是str2 和str的长度。


	string s1 = "abcdeabcde";
	string s2 = "deabc";
	if (s1.find("de")!=string::npos)
	{
		cout << s1.find("de") << endl;
	}
	if (s1.find(s2,2)!=string::npos)
	{
		cout << s1.find(s2, 2) << endl;
	}
	else
	{
		cout << "未找到对应的串匹配" << endl;
	}

replace()

str.replace(pos,len,str2) 把str 从pos 号位开始、长度为len 的子串替换为上str2

str.replace(it1,it2,str2) 把str 的迭代器[it1, it2)范围的子串替换为str2

	string s1 = "abcdeabcde";
	string s2 = "123";
	//方法1:
	s1.replace(2, 5, s2);
	cout << s1;
	//方法2
	s1.replace(s1.begin() + 2, s1.begin() + 5, s2);
	cout << s1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值