首页 > 编程语言 >C++算法刷题基础

C++算法刷题基础

时间:2024-05-20 15:52:14浏览次数:24  
标签:map set int C++ 算法 vector mymap include 刷题

1.main函数的返回类型一定是int

2.C++语言为我们准备了一组内置库,包含了很多常用的功能, 并且这些内置库可以直接使用,而其中的内置库:iostream,就提供了输入和输出的功能,允许开发者从键盘读取输入并在屏幕上输出结果。

3.在 iostream 库 中,我们有两个对象可以使用,分别是cin 和cout。
cin 是一个标准输入流对象,用于从键盘读取输入。
cout 是一个标准输出流对象,用于向屏幕输出结果。

4.std 是一个命名空间,:: 符号是作用域操作符。

当使用C++标准库的功能时,需要使用命名空间限定符来指明你要使用的内容位于哪个命名空间中。通常,会使用 std:: 的前缀,表示正在使用C++标准库中的内容。

5.逻辑非运算符!: 将条件判断的值取反后返回,真的取反后为假的,假的取反后为真的。

6.复合赋值运算符+=

7.数组的倒序与隔位输出
vector的概念和特点,以及和数组的区别
vector的声明、访问、以及操作方法
vector (被称为容器),做为C++ 标准库中的一个容器类,表示对象的集合,它可以动态地存储一组元素,所以你可以根据需要轻松地调整 vector 的大小。

//声明

include

using std::vector;

//创建
vector myVector = {1, 2, 3, 4, 5}; // 创建一个包含整数元素的容器并初始化元素
vector myVector(10); // 创建一个包含10个元素的容器,元素为int类型(值被系统默认初始化为0)
vector myVector(10, -1); // 创建一个包含10个重复元素的容器,每个元素的值都是-1

//在数组尾部增加一个
myVector.push_back(6); // 往容器的最末端添加数字6

//数组大小
int size = myVector.size(); // 获取vector的大小

//删除尾部
myVector.pop_back(); // 删除vector末尾的元素

myVector.clear(); // 清空vector中的所有元素

myVector.empty(); // 判断vector是否不含有任何元素,如果长度为0,则返回真,否则,返回假

8.字符串string(平均绩点)
//声明

include

using std::string;

//创建
string s1; // 默认初始化,s1是一个空的字符串
string s2 = "hello"; // 初始化一个值为hello的字符串
string s3(5, 'a') // 连续5个字符a组成的串,即'aaaaa'

//字符串拼接///////////
string s1 = "hello";
string s2 = "world";
string s3 = s1 + " " + s2; // 对字符串进行连接,拼接之后的字符串是"hello world", 中间加了空格

//字符串长度
int length = s1.size(); // 字符串的长度即字符串中字符的个数,"hello"的长度为5

//判断字符串空
if (s1.empty()) {
// 如果字符串为空则返回true, 否则返回false
}

//字符串输入

//常规版:遇到空格就会停止
int main() {
string word;
while(cin >> word) { // 反复读取,直到到达末尾
cout << word << endl; // 读取一个字符串并将其存储在 word 变量,然后输出,会附加一个换行符
}
}

//getline()遇到换行符才会停止
int main() {
string line;
// 获取用户输入的一行文本,并将其存储到line变量中
getline(cin, line);
// 输出读取的一行文本
cout << line << endl;
}

9.printf 函数
//声明

include <stdio.h>

//字符串
"%.2f" 表示输出一个浮点数并保留两位小数

printf("%.2f\n", sum / count);

对于

3
abac
sc
ajgdahi
这样的数据,每行数据后面都有回车符

////////////////
cin >> n 会在读取完整数之后留下一个换行符在输入缓冲区中,导致
getline(cin, s) 会直接读取这个换行符,从而得到一个空字符串
////////////////

cin.ignore(); // 忽略换行符
getchar()//也可以,效果相同

10.ASCII码中,小写的a是97,大写字母比小写字母小32

11.链表
与数组不同,链表的元素存储可以是连续的,也可以是不连续的
int *ptr = nullptr;
// 初始化为空指针

ListNode *newNode = new ListNode(val);
// 通过new构造一个新的节点,节点的值为val

struct ListNode{
int val;
ListNode* next;

ListNode(int x) :val(x),next(NULL) {}
//节点的构造函数 
//默认的只有一个无参的构造函数

}

12.哈希表
set不能存自定义的key值,map可以
unordered是哈希表,存储的元素无序
multi可以存重复的数

//头文件
// 引入<unordered_set>头文件

include <unordered_set>

// 引入set头文件

include

include

include<unordered_set>

//#include不存在
//必须要注意unordered_set之间有_
//但multiset之间没有_

//创建方式,类似vector
unorderedset myset;
set myset2;
multiset mymultiset;

//插入
myset.insert(1);

//删除
myset.erase(1);

//判断是否存在
myset.find(i)!=myset.end()

//清空之前的数据
myset.clear();

//遍历
for(set::iterator i=myset.begin();i!=myset.end();++i){
cout<<*i<<endl;
}

13.迭代器iterator

迭代器都拥有名为begin()和end()的成员,
表示指向第一个元素和
最后一个元素的下一个元素的迭代器(尾后迭代器),

如果容器为空,则begin和end返回的是同一个迭代器。

可以使用比较运算符来判断两个迭代器是否相等,
如果迭代器想要从一个元素移动到另外一个元素,
可以使用递增++运算符和递减--运算符,
表示向前(后)移动一个位置。

通过解引用*可以获取迭代器所指的对象,
下面的示例表示了vector的遍历

//创建一个vector的迭代器

vector myvector;

vector::iterator it;

for(it=myvector.begin();it!=myvector.end;++it){
cout<<*it<<endl;
//类似指针方式的解码
}

14.map

把map称之为映射,
就是将一个元素(通常称之为key键)与一个相对应的值(通常称之为value)关联起来

// 头文件
// 引入unordered_map头文件,包含unordered_map类型

include <unordered_map>

// 引入map头文件,包含map类型和multimap类型

include

//创建
//需要指明键和值的类型
map<string,int> mymap;
//将字符串映射到整数的map

//增加
myMap["math"] = 100;
myMap["english"] = 80;

map.insert(make_pair("jack",10));

//删除
map.erase("jack");
map<string,int>::iterator myiterator=mymap.begin();
map.erase(myiterator);

//是否存在
mymap.find("math")!=mymap.end()

//对map内键值对进行遍历
int x=10;
for(const pair<string,int>& kv:mymap){
if(kv.second==x) {
cout<<kv.frist<<endl;
break;
}
}
//pair表示两个变量类型的组合
//&表示引用,每次都直接使用Pair的地址,
//以便不重复创建变量

15.pair表示两个变量类型的组合
&表示引用,每次都直接使用Pair的地址,
以便不重复创建变量
//对map内键值对进行遍历
int x=10;
for(const pair<string,int>& kv:mymap){
if(kv.second==x) {
cout<<kv.frist<<endl;
break;
}
}
//pair表示两个变量类型的组合
//&表示引用,每次都直接使用Pair的地址,
//以便不重复创建变量

哈希表总结

include

include

include

include<unordered_set>

include<unordered_map>//不要忘记unordered_set之间的横杠

using namespace std;

//set、map增加不同,set用insert,map用map[first]=second;
//删除相同,都用erase(first)
//遍历都是迭代器,unordered_set::iterator i
//begin() end()

int main() {

//srand(time(NULL));

//unordered_set<int> myset;//无序哈希表

//for (int i = 1; i < 10; ++i) myset.insert(i);//将1-9输入
//for(int i = 1; i < 10; ++i) {
//    int a = rand()%9;//随机函数rand可以生成随机范围的整数值
//    //cout << a << endl;
//    if (rand() % 9 > 5)
//        myset.erase(i);
//}
//for (unordered_set<int>::iterator i = myset.begin(); i != myset.end(); ++i) {
//    cout << *i << endl;
//}

srand(time(NULL));

unordered_map<char,int> mymap;//无序哈希表

//添加
for (int i = 1; i < 10; ++i) {
    char a = 'a' + i;
    //mymap[a]=i;
    mymap.insert(make_pair(a, i));
}

//遍历
for (unordered_map<char,int>::iterator i = mymap.begin(); i != mymap.end(); ++i) {
    cout << i->first<< i->second <<" ";
}
cout<<endl;

//删除
for (int i = 1; i < 10; ++i) {
    int a = rand() % 9;//随机函数rand可以生成随机范围的整数值
    //cout << a << endl;
    if (rand() % 9 > 5) mymap.erase('a'+i);//只能从i->first来删除
}

//遍历
for (unordered_map<char, int>::iterator i = mymap.begin(); i != mymap.end(); ++i) {
    cout << i->first << i->second << " ";
}
cout << endl;

//查找
char a='a';
auto iter = mymap.find(a);
/////当找不到时,会返回mymap.end()

system("pause");

}

16.栈stack

//头文件

include

//创建
stack st;

//入栈,出栈
st.push(1);

//vector v.push_back;v.pop_back;

st.pop();//不能输入值
//map.erase("jack")和set.erase(1)可以删除指定元素

//判断为空
st.empty()!=0

//取栈顶元素
st.top();

17.queue队列

//头文件

include

//创建
queue q;

//判断空
bool set = q.empty();

//入队,出队
q.push(1);
q.pop(1);

//访问队头元素,不会出队,栈是s.top()
q.front();

标签:map,set,int,C++,算法,vector,mymap,include,刷题
From: https://www.cnblogs.com/atopes-chw/p/18202120

相关文章

  • 侯捷C++上期笔记
    1.头文件和类、构造函数c++和c最大的不同在于C++会把数据以及处理数据的函数放到一个对象objects(class)里,不同类之间不可见,类似C中结构体struct防止头文件重复声明ifndefcomplex//当之前没有声明过这个头文件时,才进行后续的声明definecomplex(2)补充定义(1)类定义(3)类功能解释......
  • C++身份证二要素实名认证api、实名认证接口
    在数字化时代背景下,个人信息安全成为了社会关注的焦点。为进一步加强网络空间的安全管理,提升服务效率,身份证实名认证接口的出现为各行业提供了更为安全、高效的身份验证解决方案。随着互联网+政务服务、金融科技、电子商务等领域的快速发展,实名认证需求日益增长。翔云身......
  • C++ 异常处理注意事项总结
    C++异常处理注意事项总结:异常安全代码:编写异常安全的代码是至关重要的。这意味着你的代码应该在面对异常时能够正确地清理资源并维持程序状态。使用RAII(ResourceAcquisitionIsInitialization)技术可以帮助自动管理资源,减少内存泄漏的风险。使用noexcept:对于不会抛出异常......
  • C++ 多线程编程要点总结
    C++多线程编程要点总结:选择合适的线程库:C++11引入了 <thread> 头文件,提供了对线程的原生支持。也可以使用第三方库,如Boost.Thread,它提供了更多高级功能和更好的跨平台兼容性。线程创建与管理:使用 std::thread 类创建新线程,并传入函数或可调用对象作为线程的入口......
  • 中国电信登录RSA算法+分析图文
    当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解中国电信登录RSA算法+分析图文日期:2016-9-30阿珏教程浏览:2727次评论:9条废话不多说!一、用到的工具1.ie浏览器(9以上......
  • 58同城的登录(RSA算法)
    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解`58同城的登录(RSA算法)日期:2016-11-23阿珏教程浏览:3631次评论:8条58同城的登录(RSA算法)这一次。又是一个精彩的登录算法解析......
  • 常见的排序算法——归并排序(四)
    本文记述了针对归并排序的3项改进和一份参考实现代码,并在说明了算法的性能后用随机数据进行了验证。◆思想本文实现了《算法(第4版)》书中提到的2项改进和练习题2.2.10。对小规模子数组使用插入排序。因为递归会使小规模问题中方法的调用过于频繁,所以改进对它们的处理方法......
  • 食物识别系统Python+深度学习人工智能+TensorFlow+卷积神经网络算法模型
    一、介绍食物识别系统。该项目通过构建包含11种常见食物类别(包括'Bread','Dairyproduct','Dessert','Egg','Friedfood','Meat','Noodles-Pasta','Rice','Seafood','Soup','Vegeta......
  • 省选阶段算法学习笔记
    一、高级数据结构计划时间:5.20-5.22这个板块欠的帐不多,但是介于它板子太多了,估计复习起来比较麻烦,就三天。这个可能会提前完成。link二、进阶动态规划计划时间:5.23-5.25这个板块不但总结没写,还忘得有点厉害???所以花三天吧。三、字符串算法计划时间:5.26-5.27这个板块总结写......
  • C++中 符号的优先级
    符号运算顺序::从左至右a++a--type()type{}a()a[].->从左至右!~++a--a+a-a(type)sizeof&a*anewnew[]deletedelete[]从右至左.*->*从左至右a*ba/ba%b从左至右a+ba-b从左至右<<>>从左至右<<=>>=从左至右==!......