C++基础
C++基础知识学习记录
阿吉的CV之路
为山者基于一篑之土,以成千丈之峭
凿井者起于三寸之坎,以就万仞之深
展开
-
编译器与集成开发环境的区别,make,makefile,cmake的区别,c++obj文件与exe文件的区别
编译器与集成开发环境的区别,make,makefile,cmake的区别,c++obj文件与exe文件的区别参考c++ obj文件与exe文件的区别参考一篇文章带初学者明白:什么是编译器,什么是集成开发环境参考5分钟理解make/makefile/cmake/nmake...原创 2021-12-23 10:55:57 · 309 阅读 · 0 评论 -
C++数组越界问题
C++数组越界内存地址分配数组时间复杂度访问越界问题内存地址分配计算机中会给每个内存单元分配一个地址,计算机通过地址来访问内存中的数据,当计算机需要随机访问数组中的某个元素时,它会首先通过下面的寻址公式,计算出元素存储的内存地址:a[i]_address = base_address + i * data_type_size其中data_type_size表示数组中每个元素的大小,在上述公式中,数组中存储的是int类型的数据,所以data_type_size就为4个字节。数组时间复杂度数组适原创 2021-11-16 11:14:36 · 2039 阅读 · 0 评论 -
C++之导入其他文件的函数
C++之导入其他文件的函数相信很多小伙伴在开发的时候,都需要在自己的主文件中导入自己写好的其他文件中的函数,那么具体应该怎么做呢?下面我们来看一个例子上述图片中的代码是要在主文件中准备调用的test_202(),下面演示一下如何在主文件中调用#include <iostream>#include "opencv2/opencv.hpp"//错误写法 #include "test.cpp"using namespace std;using namespace cv;//声明这个原创 2021-08-25 16:48:07 · 3214 阅读 · 0 评论 -
C++之多线程
C++之多线程#include <iostream>#include <thread>//声明时间头文件#include <chrono>using namespace std;void thread_func() { cout << "thread func" << endl;}class Thread {public: void thread_function();};void Thread::th原创 2021-08-17 16:07:54 · 70 阅读 · 0 评论 -
C++之STL-队列Queue与优先队列Priority_Queue
C++之STL-队列Queue与优先队列Priority_Queue队列适用于FIFO技术,其中FIFO表示先进先出。首先插入的元素将首先被提取,依此类推。有一个称为“前”的元素,它是位于最前位置或位于第一个位置的元素,也有一个名为“后”的元素,它是位于最后位置的元素。在普通队列中,元素的插入在尾部,而删除则从前面开始。C ++中的优先队列是STL中的派生容器,它仅考虑最高优先级元素。队列遵循FIFO策略,而优先队列根据优先级弹出元素,即,优先级最高的元素首先弹出。它在某些方面类似于普通队列,但在以下原创 2021-08-17 14:29:19 · 171 阅读 · 0 评论 -
C++之STL-栈Stack
C++之STL-栈Stack#include <iostream>#include <stack>using namespace std;void new_stack(stack<int> stack_use) { stack<int> int_stack_container = stack_use; while (!int_stack_container.empty()) { cout << "\t"原创 2021-08-17 13:39:37 · 332 阅读 · 0 评论 -
C++之STL-Set集合
C++之STL-Set集合set是关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。#原创 2021-08-17 11:29:12 · 107 阅读 · 0 评论 -
C++之STL-Map使用
C++之STL-Map使用Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个称为该关键字的值)的数据处理能力,由于这个特性,在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的#include <iostream>#include <map>#include &l原创 2021-08-17 10:23:06 · 84 阅读 · 0 评论 -
C++之STL-列表(List)
C++之STL-列表List原创 2021-08-16 19:37:28 · 620 阅读 · 0 评论 -
C++之STL--什么是双端队列(Deque)
C++之STL--什么是双端队列Deque双端队列表示双端队列。它属于数据结构队列中的一种,即可以从前端或后端的两端进行插入和删除。Deque创建方式deque<object type> variable同样需要声明头文件#include<deque>#include <iostream>#include <deque>using namespace std;int main() { deque<string> dequ原创 2021-08-16 19:36:03 · 430 阅读 · 0 评论 -
C++之STL--初识Vector
C++之STL--初识vector我们之前学习过静态数组的内容,静态数组的缺点在于一旦初始化之后,数组大小便无法改变,但是动态数组不存在这个问题.动态数组(vector容器)在需要扩展大小的时候,会自动处理它自己的存储需求.#include <iostream>#include <vector>using namespace std;int main() { vector<int> vec; int i = 0; cout <原创 2021-08-16 11:01:41 · 110 阅读 · 0 评论 -
C++之文件流操作
C++之文件流操作#include <iostream>#include <exception>#include <fstream>#include <cstring>using namespace std;int main() { const char *text = "niu brother is so good\n"; const char *text_2 = "niu brother is a good man\n";原创 2021-08-10 17:37:51 · 2999 阅读 · 0 评论 -
C++之异常处理
C++之异常捕获没做异常处理的程序没做异常处理的程序#include <iostream>#include <string>using namespace std;int main() { string str = "http://www.baidu.com"; char ch1 = str[100]; cout << ch1 << endl; char ch2 = str.at(100); cout &l原创 2021-08-09 21:03:35 · 802 阅读 · 0 评论 -
C++之模板
C++之模板模板函数模板函数#include <iostream>using namespace std;template<typename T>void swap(T *a, T *b) { T temp = *a; *a = *b; *b = temp;}int main() { int a = 3; int b = 5; swap(&a, &b); cout << "a:"原创 2021-08-09 18:54:25 · 64 阅读 · 0 评论 -
C++之运算符重载
C++之运算符重载#include <iostream>using namespace std;class Complex {public: Complex(); Complex(double real, double imag);public: Complex operator+(const Complex &A) const; void display() const;private: double m_real;原创 2021-08-09 13:57:50 · 50 阅读 · 0 评论 -
C++之函数重载
C++之函数重载函数重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。#include <iostream>using namespace std;class Father {private: int w; int h;public: F原创 2021-08-05 21:24:10 · 101 阅读 · 0 评论 -
C++之纯虚函数与抽象类
C++之纯虚函数与抽象类什么是纯虚函数?什么是抽象类什么是纯虚函数?纯虚函数是将基类中的函数声明为虚函数=0的函数。纯虚函数只能声明,不能定义,因为纯虚函数没有函数体。纯虚函数的写法为 virtual 函数返回类型 函数名(参数列表)=0;其中 =0 并不是将函数赋值为0,而是告知编译器这是纯虚函数。什么是抽象类包含纯虚函数的类称为抽象类,一般都是将基类写成抽象类,由于纯虚函数没有函数体,因此无法定义,不能被调用,系统也就无法为其分配内存,所以抽象类不能实例化对象。基类中的纯虚函数可以由派生类去实现原创 2021-08-04 21:04:04 · 287 阅读 · 0 评论 -
C++之虚析构函数的必要性
C++之虚析构函数的必要性C++程序员经常会面对的问题就是内存泄漏,如果操作不当发生内存泄漏,那么将会是毁灭性的Bug。在继承里,大部分基类中的析构函数通常会声明为虚函数,这样会避免指针占用的堆内存得不到释放,从而造成内存泄漏的情况。...原创 2021-08-04 00:27:03 · 1188 阅读 · 1 评论 -
内存溢出和内存泄漏
内存溢出和内存泄漏面试题:什么是内存泄漏?内存溢出?原创 2021-08-04 00:20:16 · 58 阅读 · 0 评论 -
C++之多态与虚函数
C++之多态与虚函数#include <iostream>using namespace std;class People {public: People(char *name_parameters, int age_parameters); People(const People &people); ~People(); void display(); char *get_name(); int get_age();原创 2021-08-03 21:25:12 · 118 阅读 · 0 评论 -
C++之派生类向上转型赋值基类
C++之派生类向上转型赋值基类#include <iostream>using namespace std;class A {public: A(int a_parameters); void display(); int get_a();private: int a;};A::A(int a_parameters) : a(a_parameters) {}void A::display() { cout << "a:"原创 2021-07-23 20:36:00 · 287 阅读 · 0 评论 -
C++之虚基类的构造函数
C++之虚基类的构造函数#include <iostream>using namespace std;class A {public: A(int a_parameters); int get_a();private: int a;};A::A(int a_parameters) : a(a_parameters) { cout << "虚基类A构造函数创建" << endl; }int A::get_a() { ret原创 2021-07-23 19:13:54 · 844 阅读 · 0 评论 -
C++之虚继承和虚基类
C++之虚继承和虚基类虚继承虚继承C++中使用多重继承存在一些缺点,比如继承那章提到的命名冲突,就是典型的使用多重继承带来的混乱,下列程序也是,若A中存在成员变量a,A的派生类B和C都继承了A中protected修饰的成员变量a,那么派生类D多继承C和B时,相当于继承了两次A中的成员变量a,只不过是不同基类中的成员变量a。这个时候若没有指明调用哪个基类中的成员变量a,那么就会报错,这种情况使用虚继承就可以解决,我们先来看一下多继承中错误的写法和正确的写法。#include <iostream&g原创 2021-07-23 16:38:09 · 317 阅读 · 0 评论 -
C++之继承
C++之多级继承#include <iostream>using namespace std;class A {public: void set_width(int w); void set_height(int h); void set_length(int l); void set_name(char *n); void set_sport(char *st); char *get_sport();protected:原创 2021-07-22 21:32:23 · 124 阅读 · 0 评论 -
C++之类的静态成员函数和静态成员变量
C++之类的静态成员函数和静态成员变量静态成员在类的所有对象中是共享的。即只要在类外初始化之后,该类的所有对象都可以对静态成员进行操作。静态成员变量只能在类内声明,在类外定义,静态成员函数不能调用非静态成员函数,但是可以调用全局函数。#include <iostream>using namespace std;class TClass {public: //错误写法,static int b =2;静态成员变量只能在类外定义,类内声明,通过int TClass::b = 2原创 2021-07-22 16:48:04 · 810 阅读 · 0 评论 -
C++之指向类的指针
C++之指向类的指针一个指向类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样。与所有的指针一样,必须在使用指针之前,对指针进行初始化。在前面的博文中,我们已经多次使用了指针指向类的对象,这里我们使用一个简单的程序来复习一下#include <iostream>using namespace std;class Bos {public: Bos(double l, double b, double h) :原创 2021-07-22 15:12:56 · 278 阅读 · 0 评论 -
C++之this指针
C++之this指针this指针是一个指向类成员函数作用对象的指针#include <iostream>using namespace std;class ThisClass {public: void say_word(int xx) { this->x = xx; } int get_x() { return this->x; }private: int x;};int main()原创 2021-07-21 20:55:07 · 328 阅读 · 0 评论 -
C++之内联函数
C++之内联函数#include <iostream>using namespace std;int return_max(int a, int b);int main() { system("chcp 65001"); int x = 2; int y = 3; int max_value = return_max(x, y); cout << "函数最大值:" << max_value << endl;原创 2021-07-21 15:52:15 · 78 阅读 · 0 评论 -
C++之友元函数
C++之友元函数类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend#include <iostream>using namespace std;class F原创 2021-07-20 21:16:12 · 202 阅读 · 0 评论 -
C++之拷贝构造函数
C++之拷贝构造函数当类对象作为形参传入函数当类对象作为形参传入函数C++中拷贝构造函数会有几种情况被调用,第一种是当对象作为形参传入函数时,这个时候系统会调用拷贝构造函数。#include <iostream>#include <cstring>using namespace std;class CopyStructureFunction {public: CopyStructureFunction(int width) : w(width) {原创 2021-07-20 20:12:24 · 110 阅读 · 0 评论 -
C++之构造函数和析构函数
C++之构造函数和析构函数构造函数和类名相同,而且不需要任何类型声明。构造函数的作用一般是初始化类中的成员变量的值。来看一下列表式的构造函数的写法#include <iostream>#include <cstring>using namespace std;class Structure {public: void set(int width, int height, int length); int get(); //构造函数声明原创 2021-07-20 15:56:54 · 173 阅读 · 0 评论 -
C++之类访问修饰关键字
C++之类访问修饰关键字private访问关键字public在前面博客中已经出现多次,这里我们只记录private和protected关键字的用法。private访问关键字#include <iostream>#include <cstring>using namespace std;class Tprivate {public: double get_width(); void set_width(double w);private:原创 2021-07-20 14:02:47 · 104 阅读 · 0 评论 -
C++之类成员函数
C++之类成员函数#include <iostream>#include <cstring>#include <cstdlib>using namespace std;class Bird {public: double l; double b; double w; double h; double get_volume(); void set_value(double len, double bread原创 2021-07-20 13:13:27 · 110 阅读 · 0 评论 -
C++之类的基本定义
C++之类的基本定义#include <iostream>#include <cstring>#include <cstdlib>#include <ctime>using namespace std;class Bird {public: int height; int width; int length; double average; double get(); void set(in原创 2021-07-19 20:26:17 · 51 阅读 · 0 评论 -
C++之结构体
C++之结构体定义结构体传结构体参数定义结构体C++ 数组允许定义可存储相同类型数据项的变量,但是结构体是 C++ 中另一种用户自定义的可用的数据类型,它允许程序存储不同类型的数据项。#include <iostream>#include <cstdio>#include <ctime>#include <cstring>using namespace std;#Books结构体名字,根据Books可以定义结构体的变量book,book1,原创 2021-07-19 15:34:55 · 161 阅读 · 2 评论 -
C++之引用
C++之引用引用和指针的区别将引用作为参数传递给函数引用和指针的区别#include <iostream>#include <cstdlib>#include <ctime>using namespace std;int main() { system("chcp 65001"); int a = 10; int &b = a; int c = 20; int *p; p = &a;原创 2021-07-18 18:12:06 · 90 阅读 · 0 评论 -
C++之函数返回指针类型
C++之函数返回指针类型#include <iostream>#include <cstdlib>#include <ctime>#include <malloc.h>using namespace std;template<class T>int get_array_length(T &arr);int *get_random();int main() { system("chcp 65001");原创 2021-07-17 14:43:28 · 1137 阅读 · 0 评论 -
C++之向函数传递指针类型参数
C++之向函数传递指针类型参数#include <iostream>#include <ctime>using namespace std;void get_second(unsigned long *ptr);template<class T>int get_array_length(T &arr);int main() { system("chcp 65001"); unsigned long seconds = 1;原创 2021-07-17 11:33:31 · 654 阅读 · 1 评论 -
C++之指针常量、常量指针和指向常量的常量指针的区别
指针常量、常量指针和指向常量的常量指针三者的区别指针常量常量指针指向常量的常量指针区分指针常量和常量指针的口诀:使用const的好处指针常量其实,我们常见的数组就是一个指针常量,指针常量表示指向的内存地址一旦初始化后就不可更改,但是其地址指向的值可以更改。#include <iostream>#include <cstdlib>#include <cstring>#include <ctime>using namespace std;int原创 2021-07-16 20:32:36 · 161 阅读 · 0 评论 -
C++之指针数组
C++之指针数组#include <iostream>#include <cstring>#include <cstdlib>using namespace std;template<class T>int get_array_length(T &arr);int main() { system("chcp 65001"); int *ptr[3]; int a[] = {100, 200, 300};原创 2021-07-16 15:12:25 · 685 阅读 · 0 评论