C++常用知识点整理

排序

1.对vector排序,并去除重复元素

Vector

1.vector去重:

	vector<int>::iterator iter = unique(vec.begin(), vec.end());
	//删除重复元素
	vec.erase(iter, vec.end());

2.二维的vector:

vector<vector<bool>> flag(board.size(), vector<bool>(board[0].size()));

3.vector默认初始化的值
vector默认初始化的值为0;

vector<int> arr(10);

3.memset
在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法.

Trie* next[26];
memset(next, 0, sizeof(next));

4.map的使用

https://www.zhaokeli.com/article/8309.html

map<string,int> cmap;
//第一种插入值 的方法,没有自动新加,有的话覆盖
cmap["op1"] = 1;

4.resize()
vector vec;
vec.resize(n,0); //将vec的值初始化为n个0.

Set

set的使用
被插入进set的元素都会在set里进行 自动排序和去重 ,这就有了很大的应用空间。集合set的元素只能使用迭代器迭代输出。set是由hog

#include<set>
vector<string> new_result;
set<string>::iterator it1;
for (it1 = set_result.begin(); it1 != set_result.end(); it1++){
    new_result.push_back(*it1);
}
//set元素的插入操作
set<int>s;
s.insert(3); 
s.insert(1);
s.insert(2);
s.insert(1);
Map

C++ Map是一种键值对容器。map:本质是一个红黑树,是一个可以自动排序的数据结构,所以map的元素都是有序排列的。
unordered_map:本质是哈希表,执行查找、存储操作很快,但是比较耗空间,其内部元素是无序的

https://blog.youkuaiyun.com/sevenjoin/article/details/81943864

判断Map中的一个键值是否存在:

#include<iostream>
#include<unordered_map>
using namespace std;
int main(){
	unordered_map<string, string> umap;
	umap["ztw"] = "ztw";
	if (umap.find("ztw")!=umap.end()){
		cout << "This is a exit" << endl;
	}
	system("pause");
}

map的大小查看插入元素的数量,可以使用size函数
map的遍历:

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

int main(){
	unordered_map<string, vector<string>> umap;
	umap["ztw"].emplace_back("ztw");
	unordered_map<string, vector<string>>::iterator iter = umap.begin();
	while (iter != umap.end()){
		cout << iter->first << "";
		iter++;
	}
	system("pause");
}
字符串

对字符串操作需要引入string头文件

  1. 将字符串变为整型
string a = "11";
#将字符串a变为了字符数组a_str
const char* a_str = a.c_str();
cout << atoi(a_str) << " ";

2.将整型变为字符串型

int a = 100;
cout<< to_string(a)<<" ";

3.单个字符变为整型

int main() {
	char a = '9';
	int b = a-'0';
	cout << b << " ";
	system("pause");
}
变量类型

https://www.cnblogs.com/0patrick/p/12864894.html(如何获取变量类型)

C++结构体和类

1.c++结构体和类的区别

https://blog.youkuaiyun.com/lailaiquququ11/article/details/82904406

2.C++写一个结构体

http://c.biancheng.net/view/1407.html

注意下述形式的描述:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
多态

多态首先是建立在继承的基础上的,先有继承才能有多态。多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。

红黑树

https://blog.youkuaiyun.com/qq_36610462/article/details/83277524

队列

对于offer和add的区别:

https://blog.youkuaiyun.com/weixin_34334744/article/details/93761993

poll与pop的区别

https://blog.youkuaiyun.com/hellokitty_gaga/article/details/109180558

inline

在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。

https://www.cnblogs.com/fnlingnzb-learner/p/6423917.html

数据类型
内存分配

malloc和calloc的区别

https://zhidao.baidu.com/question/40468782.html

node2str[0] = (char*)calloc(2, sizeof(char));
如果分配2,但是可以使用3的空间,但是有可能会有值覆盖的情况。

assert

//使用assert,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。

<think>好的,我需要帮助用户整理蓝桥杯C++竞赛的知识点。首先,我得回顾用户提供的三个引用内容,看看有哪些关键点可以提取出来。 引用[1]提到了万能头文件`#include <bits/stdc++.h>`,这在竞赛中很常用,可以简化代码。另外,实数函数和求幂次运算符可能指的是数学函数,比如`pow()`,或者位运算中的移位操作。需要确认这些内容的具体细节,确保准确。 引用[2]讨论了自增运算符`i++`和`++i`的区别,这是C++中的基础知识点,容易在考试中出现。用户可能还需要其他运算符的注意事项,比如逻辑运算符、位运算符等,但根据现有资料,先整理自增运算符的例子和区别。 引用[3]提到了一些客观题知识点,比如C++的基本模块不是函数,而是可能指模块结构或其他概念?这里需要进一步核实。另外,数组的定义、递归、数组和指针的关系、字符串处理都是点。可能还需要补充指针和数组的区别,以及字符串相关函数,比如`strcpy`、`strlen`等。 用户需要的是全面的知识点总结,所以除了引用中的内容,可能还需要补充其他常见考点。例如,标准模板库(STL)的使用,如`vector`、`queue`、`stack`等容器,以及排序算法`sort()`。此外,输入输出流的优化(`ios::sync_with_stdio(false)`)、动态内存分配、结构体、文件操作等也可能是考点。 接下来要组织这些知识点,结构清晰,分点列出。需要确保每个部分都有足够的解释和例子,特别是代码示例。例如,在讲解自增运算符时,给出具体的代码片段,说明前置和后置的区别。在讨论递归时,可以举阶乘或斐波那契数列的例子。 还要注意用户提到的LaTeX格式要求,行内数学公式用`$...$`,独立公式用`$$...$$`。例如,在讲解位运算时,可能需要用到数学表达式,比如左移运算符`<<`相当于乘以2的幂次,可以写成`$a << n = a \times 2^n$`。 另外,用户要求生成相关问题,我需要根据整理知识点提出相关的问题,帮助复习。例如,关于递归的应用场景、指针和数组的区别、STL容器的使用等。 最后,确保回答符合用户的所有格式要求,正确使用引用标识,并且语言为中文。避免使用Markdown格式,但示例代码块需要保留。检查是否有遗漏的知识点,比如蓝桥杯常考的动态规划、贪心算法等,但根据引用内容,可能主要集中在基础语法和结构上,所以先围绕引用内容展开,再适当补充其他常见考点。 总结下来,结构大致分为:头文件、运算符、基本语法结构、数组与指针、字符串处理、递归、STL、其他注意事项。每个部分给出解释和示例,最后生成相关问题。</think>### 蓝桥杯C++竞赛知识点整理 #### 1. 头文件与常用库 - **万能头文件**:`#include <bits/stdc++.h>` 包含所有标准库,适合竞赛快速编码[^1]。 - **数学函数**:如求幂次可用`pow(x, n)`,或位运算`a << n`等效于$a \times 2^n$。 #### 2. 运算符与表达式 - **自增运算符**: - `i++` 先使用`i`再自增,`++i` 先自增再使用。 示例代码: ```cpp int a = 1, b = 1; int n1 = a++; // n1=1, a=2 int n2 = ++b; // n2=2, b=2 ``` 引用[^2]。 #### 3. 基本语法结构 - **函数与模块**:C++程序的基本模块是函数,但程序入口为`main()`,需注意题目中可能涉及的判断题[^3]。 - **递归**:常用于分治算法(如快速排序、斐波那契数列),需掌握递归终止条件和调用逻辑。 #### 4. 数组与指针 - **数组定义**:需明确大小,如`int arr[10];`。 - **指针与数组关系**:数组名可视为指针,如`arr[i]`等效于`*(arr + i)`。 #### 5. 字符串处理 - **C风格字符串**:使用字符数组或`<cstring>`库函数(如`strcpy`, `strlen`)。 - **字符串输入输出**:注意`cin`与`scanf`对空格的处理差异。 #### 6. STL(标准模板库) - **常用容器**: - `vector`:动态数组,支持快速随机访问。 - `queue`/`stack`:队列和栈的实现。 - **排序算法**:`sort(begin, end)`默认升序,可自定义比较函数。 #### 7. 其他注意事项 - **输入输出优化**: ```cpp ios::sync_with_stdio(false); // 关闭同步,提升速度 cin.tie(0); // 解除cin与cout的绑定 ``` - **位运算**:如`a & 1`判断奇偶,`a >> 1`等效于$a \div 2$。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值