
C++
仗剑天涯CC
博客都是学习过程中总结的笔记,供大家参考,有错误可以指出来
展开
-
(10)STL算法之搜索(二)& 二分查找
之前在(3)STL算法之搜索里边介绍过几个查找函数,如find()、search(),这些函数的底层实现的都是顺序查找,采用的是遍历的方式,在某些时候效率并不高,例如当指定区域里的数据处于有序状态时,查找某个目标值,显示二分查找的效率更高。然后我是昨天写算法题的时候才看到别人用到了STL算法里的lower_bound()。才了解到了lower_bound()等其他几个底层为二分查找的查找函数。先来看下我遇到的那道题。问题:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于原创 2021-03-06 17:48:59 · 346 阅读 · 0 评论 -
数组指针&指针数组
数组指针:int (*p) [n] 指针数组:int *p [4]详见https://www.cnblogs.com/mq0036/p/3382732.html原创 2021-03-02 13:59:39 · 107 阅读 · 1 评论 -
类构造、析构、赋值函数示例
平常自己写一些例程的时候,一般想的、写的都比较简单,但是在实际工程应用的时候应该尽可能的将程序写的优美、高效。class String{public: String(const char* str = NULL); String(const String& other); ~String(void); String& operator=(const String& other);private: char* m_data;};String::String(原创 2021-03-01 14:42:19 · 203 阅读 · 2 评论 -
动态规划
动态规划(Dynamic Programming)把一个简单的问题变成相对简单的子问题,再利用保存解决这些子问题得到的结果来减少运算复杂度。动态规划问题的一般形式为:求最值,比如最大背包价值、最短路线等,这种问题最简单无脑的办法就是穷举,使用到动态规划的问题一般还涉及重叠子问题。看一个例子,比如求斐波那契(Fibonacci)数列的第N项斐波那契数列:1 1 2 3 5 8 13 21.....fib(1) = 1fib(2) = 1fib(3) = 2fib(...原创 2021-01-25 22:13:11 · 290 阅读 · 0 评论 -
STL之unordered_map
关联容器:unordered_map详细介绍看这个,基本就够用了。粘一个力扣编程题:给定一个数组nums和一个整数目标值target,请在数组中找到和为目标值的两个整数,返回它们的数组下标。你可以假设每种输入只会对应一个答案,但是数组中同一个元素不能使用两边。看到这个我想到暴力破解的办法,但是暴力破解时间复杂度比较高,原因在于在寻找target-x的时间复杂度高,所以使用哈希表来快速寻找数组中的目标元素,我们先创建一个哈希表,对于每一个x,查找哈希表中是否存在target-x,然后将x插入到哈希原创 2021-01-22 21:22:51 · 189 阅读 · 1 评论 -
STL之map(关联式容器)
map是一种关联式容器。由许多对的[key,value]组成,按照特定顺序排列,其键值独一无二,不可重复。在映射中,键值通常用于排序和唯一标识元素,而映射值存储与此键关联的内容,键和映射值的类型可能不同。map通常实现为二叉搜索树,STL map底层用RB-tree实现。网易校招笔试:从一篇文章里找出一个单词作为这篇文章的关键词,一个单词可以作为关键词当且仅当它在这篇文章中出现的频率不低于1%,现在他想知道有多少个不同的单词可以作为关键词。一个单词出现的频率=(某一单词出现次数/文章单词总数).原创 2021-01-20 22:14:17 · 187 阅读 · 0 评论 -
(9)STL算法之逆转&&旋转
1、逆转是指将容器或序列中的元素按逆向顺序翻转。STL算法提供了几个实现逆转功能的算法reverse()和reverse_copy()。先来看看reverse()的底层实现。template <class BidirectionalIterator>void reverse (BidirectionalIterator first, BidirectionalIterator last);template <class BidirectionalIterator>voi原创 2021-01-16 20:29:30 · 379 阅读 · 0 评论 -
(8)STL算法之替换
在STL算法中可以使用替换函数replace()、replace_if()完成替换操作。先来看下replace函数的底层实现。// replace() 声明与实现template <class ForwardIterator, class T>void replace (ForwardIterator first, ForwardIterator last,const T& old_value, const T& new_value);template <c原创 2021-01-15 21:07:30 · 276 阅读 · 0 评论 -
改善程序与设计的N个做法
经验往往包含着珍贵的学问。1、尽量用const、enum、inline替换#define对于简单常量,使用 const 代替宏定义,其优点:const 常量能够出现在符号表中,方便调试。宏定义因为进行的宏替换,有时候会造成代码冗余,const 常量能够很好的避免这个问题。const 常量可以作为类属成员,#define 则毫无封装性。整型族类属常量可以在类中声明时直接初始化。enum 也可以作为整型常量使用,并且无法取得其地址。使用内联函数代替宏定义的函数将会在不损失效率的情况下降低发.原创 2021-01-13 20:16:35 · 178 阅读 · 0 评论 -
菱形继承问题
先来看程序......#include <iostream>using namespace std;class Animal{ //动物public: int m_Age;};class horse : public Animal{ // 马};class donkey : public Animal{ // 驴};class mule : public horse, public donkey{ // 骡子};void test(){ m原创 2021-01-12 21:31:46 · 164 阅读 · 0 评论 -
(7)STL算法之交换&&赋值
3、互换STL的大部分容器都提供了成员函数swap(),用于两个不同容器对象之间的元素交换,同时,STL算法也提供了算法swap()。个人认为尽量使用容器自己的swap()。(1)swap()// 声明及定义template <class T> void swap (T& a, T& b);template <class T> void swap (T& a, T& b){ T c(std::move(a));原创 2021-01-11 17:55:46 · 542 阅读 · 0 评论 -
(6)STL算法之转换
2、转换函数transform()实现了将源区间的元素复制到目标区间,也可以修改元素、合并两个区间。//对源区间 [first1,last1]的每一个元素均调用函数 op(elem) ,结果写入以result为起始位置的目标区间,函数返回值是最后一个被转换元素的下一位置。 template <class InputIterator, class OutputIterator, class UnaryOperation>OutputIterator transform (InputI原创 2021-01-11 00:15:08 · 345 阅读 · 0 评论 -
(5)STL算法之复制
修改序列式算法能对容器内容造成修改,而改变容器一般有两种方法:(1)使用迭代器遍历序列的过程中,直接改变元素的值;(2)在元素复制的过程中,改变元素的值。能对容器内容造成改变的算法主要包括:复制、转换、互换、赋值、替换、逆转、排列等 8种。1、复制元素复制是指在两个容器变量之间进行元素传递。(1)copy()// 声明及定义template <class InputIterator, class OutputIterator>OutputIterato.原创 2021-01-10 21:40:26 · 247 阅读 · 0 评论 -
(4)STL算法之比较
区间比较算法(1)equal()该函数可以实现两个容器对象的比较,如果两个对象相等,函数返回true,只能比较属于同一类型的不同变量。template <class InputIterator1, class InputIterator2>bool equal (InputIterator1 first1, InputIterator1 last1,InputIterator2 first2);template <class InputIterator1, class原创 2020-12-30 17:05:05 · 418 阅读 · 0 评论 -
(3)STL算法之搜索
3、搜寻算法STL也提供了一系列搜寻算法。【 find() 】template <class InputIterator, class T>InputIterator find (InputIterator first, InputIterator last, const T& val);template<class InputIterator, class T>InputIterator find (InputIterator first, Inpu原创 2020-12-28 11:55:28 · 173 阅读 · 0 评论 -
(2)STL算法之元素计数
2、元素计数算法STL提供了两个计数功能的算法,分别是count(),以及条件计数的算法count_if();【count()原型】template <class InputIterator, class T>typename iterator_traits<InputIterator>::difference_typecount (InputIterator first, InputIterator last, const T& val);该函数模板原创 2020-12-28 10:20:44 · 345 阅读 · 0 评论 -
(1)STL算法之遍历容器
1、for_each() 遍历容器在实现遍历的基础上,利用参数三(仿函数)实现其他操作,仅遍历打印,或者遍历更改容器值。【原型】template <class InputIterator, class Function>Function for_each (InputIterator first, InputIterator last, Function fn); 参数一:迭代器 参数二:迭代器 参数三:仿函数(也可以叫 函数对象)#inclu...原创 2020-12-27 17:09:04 · 255 阅读 · 0 评论 -
STL算法
【算法库简介】 #include<algorithm>用有限的步骤解决逻辑或数学上的问题,称为算法。具体的算法是指对解题方案准确而完整的描述,是一系列解决问题的清晰地指令。算法一般分为基本算法、数据结构的算法、数论与代数算法、计算几何算法、图论算法、动态规划及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法等。STL算法一般采用覆盖,而非插入,调用时应当保证目标空间拥有足够的元素空间。STL算法允许使用容器自带的算法操作,这些算法更适合容器自身,效率更高。STL中.原创 2020-12-28 13:13:38 · 209 阅读 · 0 评论 -
C++中的字符串类
在C++中只有一个字符串类,即basic_string,其管理着一个 '\0' 结尾的字符数组。头文件:#include <string>string类支持两种输入方式:cin方式和getline()方式常见的string类构造函数有以下几种形式:string s; 空字符串string s(str); 拷贝字符串str的复制品string s(str, stridx); 将字符串str中始于stridx的部分,作为字符串 s 的初值string s(str...原创 2020-12-03 15:15:15 · 502 阅读 · 0 评论 -
STL之list【待完善】
list容器也是序列式容器(不会对存储的数据进行排序)之一,由双向链表实现,每个节点存储一个元素,支持前后两个移动方向。list的优势在于任何位置执行插入和删除动作都非常快,时间复杂度为O(1)。头文件:#include<list>list 模板类定义域命名空间 std中。list 不支持随机存取,因此不提供下标操作符和 at() 函数。list 不提供容量、空间重新分配等操作函数,每个元素都有自己的内存。list 提供特殊成员函数,专门用于移动元素,速度更快。常用lis原创 2020-12-02 23:07:59 · 124 阅读 · 0 评论 -
STL之vector【待完善】
向量(vector)是定义于名称空间std内的模板。是一种序列式容器头文件:#include<vector>template <class T, class Allocator=allocator<T>> class vector;底层实现:数组。连续存储的容器,动态数组,在堆上分配内存空间。内存增长为两倍容量增长:当插入新元素时,如果还有剩余空间,那么直接添加到最后(或者插入到指定位置),然后调整迭代器;如果没有剩余空间了,就分配原来空间的两倍,然后将原原创 2020-12-01 23:30:05 · 238 阅读 · 0 评论 -
C++面试题
1、C++和C的区别思想:C++面向对象 C面向过程的结构化语言语法:C++具有封装、继承、多态三大特性 C++增加更多类型安全的功能,如强制类型转换 C++支持范式编程(模板)2、static关键字的作用(1)全局静态变量在全局变量前加上关键字static,全局变量就被定义成一个全局静态变量;存储在静态存储区,在整个程序运行期间一直存在;未初始化的全局静态变量会自动初始化为0;作用域为声明static的文件,文件外不可访...原创 2020-11-10 23:31:49 · 147 阅读 · 0 评论