![](https://img-blog.csdnimg.cn/20191005135813438.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++编程
文章平均质量分 60
C++语言
戎码关山
你在炫耀诗和远方,父母却尚在苟且
展开
-
如何提高输入输出速度
我们在调试程序时经常使用这个语句来使用外部输入输出,但是直接提交OJ会导致报错,因为OJ网站不一定将输入输出存放在这样两个txt文件中。C++为了能够让cin和cout与scanf、printf混用,使用一个流缓冲区来同步C的标准流,但是这会让输入输出变慢,这里的。今天在codeforces上看到一个大佬的代码,里面有个函数,能够在使用cin cout的同时提高效率。,可以解除这种同步,但是相应地,就不能在C++中混用C的输入输出方法。解除cin和cout的绑定,减轻IO的负担,也能加速输入输出的速度。原创 2023-04-12 23:36:52 · 180 阅读 · 0 评论 -
C++程序编译链接过程
(Linking):在这一步骤中,链接器将所有的目标文件和库文件(如静态库和动态库)结合起来,创建最终的可执行文件。在动态链接时,可执行文件只包含对库文件的引用,而不包含库文件的实际机器码。以上是一般情况下的编译和链接过程,不同的编译器和操作系统可能会有一些细微的差异。在具体的开发环境中,通常使用构建工具(如GCC、Clang、Visual Studio等)来自动执行这些步骤,简化编译和链接的过程。在静态链接时,所有的代码和库文件都被复制到可执行文件中,使得可执行文件独立于系统中是否存在相应的库文件。原创 2023-05-24 20:54:03 · 177 阅读 · 0 评论 -
extern怎么使用
关键字会与头文件一起使用,将声明放在头文件中,然后在需要使用的源文件中包含该头文件。关键字来声明一个在其他源文件中定义的全局函数。同样地,这样可以告诉编译器函数的定义在其他地方,从而避免重复定义。关键字只是声明变量或函数的存在,并不进行实际的定义。关键字用于在一个源文件中声明一个在其他源文件中定义的全局变量或函数。关键字,可以告诉编译器某个变量或函数的定义在其他地方,从而避免重复定义。关键字来声明一个在其他源文件中定义的全局变量。关键字,可以确保编译器知道它们的定义在其他地方,并进行正确的链接。原创 2023-05-24 21:18:00 · 981 阅读 · 0 评论 -
C++前置声明
通过使用前置声明,可以在头文件中仅引用被依赖的类型、函数或变量的存在,而不是包含完整的定义,从而解决了循环依赖问题。如果一个头文件中只包含了前置声明而不包含完整的定义,那么在包含该头文件时,编译器只需要知道该类型、函数或变量的存在即可,无需读取和解析完整的定义。总的来说,前置声明可以在头文件之间建立一种更松散的耦合关系,减少了头文件的包含和编译器的工作量,从而提高了编译速度和可维护性。通过使用前置声明,我们可以将类型、函数或变量的声明提前到需要使用它们的地方,而不需要提供完整的定义。原创 2023-05-23 20:20:57 · 1164 阅读 · 0 评论 -
头文件<iosfwd>
这是因为在代码中使用前置声明时,只需要知道IO类的存在,而无需包含完整的头文件。只包含了IO类的前置声明,而不包含完整的定义,所以编译器只需要读取和解析前置声明,而不需要处理完整的IO类定义。头文件,可以使用这些类的前置声明来声明指向这些类的指针或引用,而无需包含完整的头文件。头文件提供了IO类的前置声明,使得在代码中可以引用IO类而无需包含完整的头文件,从而减少了编译时间和头文件之间的相互依赖。头文件的目的是为了减少编译时间和减少头文件之间的相互依赖,特别是在处理IO类的前置声明时。原创 2023-05-23 20:27:13 · 888 阅读 · 1 评论 -
函数声明与定义
使用函数声明和定义的分离,可以实现接口与实现的分离,提高代码的可维护性和可读性。同时,通过在源文件中包含相应的头文件,可以确保函数的声明与定义一致,避免潜在的问题。然后,在链接过程中,链接器将函数的调用与其定义进行匹配,将调用位置与函数的实现进行连接。指的是在代码中提供函数的接口信息,包括函数名称、参数列表和返回类型,以告诉编译器函数的存在和如何调用该函数。通常情况下,函数声明放在头文件(.h 或 .hpp)中,而函数的定义放在源文件(.cpp)中。头文件包含函数的声明,而源文件包含函数的定义。原创 2023-05-24 21:08:03 · 824 阅读 · 0 评论 -
变量声明与定义
*变量声明(Variable Declaration)**是指在代码中声明变量的存在,告诉编译器该变量的名称和类型,但并不分配内存空间。**变量定义(Variable Definition)**是指在代码中为变量分配内存空间,并可选择初始化变量的值。总结来说,变量的声明告诉编译器有一个变量存在,而变量的定义则为变量分配内存空间。在实际的编程中,根据需要进行变量的声明和定义,以满足程序的需求。通常情况下,变量的声明和定义可以同时进行,即在声明的同时进行定义。在C++中,变量的声明和定义是两个不同的概念。原创 2023-05-24 21:08:59 · 633 阅读 · 0 评论 -
header guards和pragma的区别
通过在头文件的开头和结尾添加预处理指令,可以确保头文件只在第一次被包含时才会被处理。它可以放在头文件的开头,用于指示编译器只包含该头文件的一次副本。是用于防止头文件重复包含的两种常见技术。总而言之,Header guards 是一种标准的、可移植的方法,可以用于防止头文件重复包含。已经定义,预处理器会跳过头文件的内容,从而避免重复定义和重复声明的问题。是一种简洁的、非标准的方法,在大多数编译器中都被支持。不需要在头文件的结尾添加额外的指令。并继续处理头文件的内容。的指示来判断是否包含该头文件的副本。原创 2023-05-24 21:26:18 · 90 阅读 · 0 评论 -
C++程序结构
这只是一个简单的示例,实际的C++程序可能会更加复杂,包含多个头文件、多个函数以及更多的语句和表达式。但是,以上的基本结构组织方式通常是通用的。(Preprocessor Directives):预处理指令以井号(#)开头,用于在编译之前对源代码进行处理。(Global Declarations):在主函数之外声明的全局变量和函数,它们可以在程序的任何地方访问。函数)以及其他自定义函数的定义。主函数是程序的入口点,程序从主函数开始执行。在上面的示例中,首先是预处理指令部分,用于包含头文件。原创 2023-05-24 20:51:03 · 371 阅读 · 0 评论 -
有三个文件,fun.h,fun.cpp,main.cpp为什么只需要在fun.cpp和main.cpp包含fun.h,而不需要在main.cpp包含fun.cpp?
将函数和变量的声明与定义分离,避免了重复定义和编译时的重复编译问题。总之,通过将函数和变量的声明放在头文件中,可以使得不同的源文件可以共享和使用这些声明,实现模块化的设计。而编译和链接过程将确保源文件中的引用与定义匹配,并生成最终的可执行文件。编译和链接是将源代码转换为可执行文件的过程。让我们以一个具体的示例来说明这个过程:原创 2023-05-24 21:05:36 · 284 阅读 · 0 评论 -
为什么使用头文件
在实际开发中,头文件的使用更加复杂和多样化,可以包含更多的声明、定义和依赖的头文件。总而言之,头文件在C++中的使用可以提供代码模块化、接口定义、类型和常量定义等功能,增加了代码的可读性、可维护性和复用性,同时也提高了编译效率和构建时间。通过在需要使用这些类型和常量的源文件中包含头文件,可以方便地使用这些定义,提高了代码的可读性和可维护性。由于头文件的声明可以被多个源文件共享,当头文件发生改变时,只需要重新编译引用了该头文件的源文件,而不需要重新编译所有的源文件,从而提高了构建时间。原创 2023-05-24 20:59:28 · 869 阅读 · 0 评论 -
宏定义的使用( DEBUG 宏)
通过使用条件编译宏,可以根据编译时的条件选择性地包含或排除代码,以满足不同的编译配置和需求。请注意,在使用条件编译宏时,要谨慎考虑代码的可读性和可维护性,避免过度使用条件编译,以及编写与平台相关的代码。请注意,不同编译器可能有不同的选项来定义宏,具体的选项可能会有所差异,请参考所使用编译器的文档或帮助以获得更准确的信息。通过使用宏定义,您可以为某个标识符定义一个文本替换规则,以便在代码中使用该标识符时,会自动被替换为指定的文本。宏的定义与否,在编译时决定是否编译某些调试相关的代码块。被定义为条件编译宏。原创 2023-05-24 21:21:07 · 1115 阅读 · 0 评论 -
C++编程技巧
这是编译器指令,告诉GCC编译器使用最大优化级别(O3)和循环展开(unroll-loops)进行编译,以提高程序的运行速度optimize这会告诉编译器尽可能地优化代码以提高运行速度,有时候甚至会牺牲浮点数的精度。这里的程序是计算一个整型数组的所有元素的和,然后输出。如果我们将其与没有优化指令的版本比较,可能会在大型数据集或者复杂的计算中看到明显的运行速度的差异。不过在小型程序和简单的计算中,可能看不出明显的区别。原创 2023-05-20 13:42:55 · 564 阅读 · 0 评论 -
《C++编程思想》--第2章--对象的创建与使用
就像小结中所说的那样,这一章没有教授具体的oop知识,而是通过iostream,fstream,vector,string等前人已经定义好的类,来说明oop面对对象编程的简便性。只需三个步骤:1、包含头文件2、创建对象3、利用类方法对对象进行操作。2.9 练习 答案2-12-22-32-42-52-62-72-82-92-10...原创 2020-12-01 16:16:55 · 227 阅读 · 0 评论 -
2.10
#include<iostream>#include<vector>using namespace std;int main(){ float f = 3.14; vector<float> v; for(int i = 1;i <=25;i++){ v.push_back(f); f+=f; } for(int i = 0;i < v.size();i++){ cout << i << " : " <原创 2020-11-25 14:41:33 · 190 阅读 · 0 评论 -
2.9
#include<iostream>#include<vector>using namespace std;int main(){ float f = 3.14; vector<float> v1,v2,v3; for(int i = 1;i <=25;i++){ v1.push_back(f); f+=f; } for(int i = 1;i <=25;i++){ v2.push_back(f); f+=f; } for(原创 2020-11-25 14:41:00 · 153 阅读 · 0 评论 -
2.8
#include<iostream>#include<vector>using namespace std;int main(){ float f = 3.14; vector<float> v; for(int i = 1;i <=25;i++){ v.push_back(f); f+=f; } for(int i = 0;i < v.size();i++){ cout << i << " : " <原创 2020-11-25 14:40:34 · 169 阅读 · 0 评论 -
2.7
#include<iostream>#include<fstream>#include<string>#include<vector>using namespace std;int main(){ ifstream in("2_5txt.txt"); string line; vector<string> v; while(getline(in,line)) v.push_back(line); for(int i = 0;原创 2020-11-25 14:39:25 · 194 阅读 · 0 评论 -
2.6
#include<iostream>#include<fstream>#include<string>#include<vector>using namespace std;int main(){ vector<string> v; ifstream in("2_5txt.txt"); string line; while(getline(in,line)){ v.push_back(line); } string fi原创 2020-11-25 14:39:03 · 165 阅读 · 0 评论 -
2.5
#include<iostream>#include<fstream>#include<string>#include<vector>using namespace std;int main(){ vector<string> v; ifstream in("2_5txt.txt"); string line; while(getline(in,line)){ v.push_back(line); } for(int i原创 2020-11-25 14:38:08 · 155 阅读 · 0 评论 -
2.4
#include<iostream>#include<fstream>#include<string>#include<vector>using namespace std;int main(){ ifstream in("2_4txt.txt"); string word,key; vector<string> v; int num = 0; cin >> key; while(in >> word原创 2020-11-25 14:37:28 · 110 阅读 · 0 评论 -
2.3
#include<iostream>#include<fstream>using namespace std;int main(){ ifstream in("2_3txt.txt"); string line; int num=0; getline(in,line); for(int i = 0;i<line.size();i++) if(line[i] == ' ') num++; cout << num+1 << en原创 2020-11-25 14:35:41 · 171 阅读 · 0 评论 -
练习 2.2
#include<iostream>using namespace std;int main(){ double radis; cin >> radis; double area; area = 3.14 * radis * radis; cout << area; cin.get(); cin.get();}原创 2020-11-25 14:35:06 · 169 阅读 · 0 评论 -
练习2.1
#include<iostream>using namespace std;int main(){ cout << "I'm " << "dgh," << "I'm " << 21 << " years old"; cin.get();}原创 2020-11-25 14:34:07 · 219 阅读 · 0 评论 -
C++异常
C++里面的异常处理比起Java要简单许多,因为Java为了实现自己万物皆是对象的宗旨,将每一个常见异常封装为一个个对象,但是C++中不是这样,只需要throw try catch三个关键字就可以完成异常的处理#include <iostream>using namespace std;double division(int a,int b){ if(b == 0) throw "除数不能为0"; else return a*1.0/b;}原创 2020-08-28 15:49:48 · 128 阅读 · 0 评论 -
多态实现
我发现,声明基类函数为virtual函数之后,基类指针不能直接调用该函数,必须在实例化对象之后才可以调用。#include <iostream>using namespace std;class Human{protected: int age;public: Human(int n):age(n){} virtual void speak(){ cout << "Human is " << age << e原创 2020-08-28 15:17:23 · 112 阅读 · 0 评论 -
C++的静态成员变量和静态成员函数
Car.h//// Created by musicLibrary on 2020/8/28.//#include <cstring>using namespace std;#ifndef IO_CAR_H#define IO_CAR_Hclass Car { string name;public: static int stable; void getName(); Car(string name){ this->原创 2020-08-28 13:21:49 · 175 阅读 · 0 评论 -
选择排序实现
#include<iostream>using namespace std;template<class T>void Swap(T &a,T &b)//要使用引用{ T t = a; a = b; b = t;}template<class T>void selectSort(T a[],int n){ int leastIndex; for(int i = 0;i < n-1;i++)原创 2020-08-20 16:44:19 · 144 阅读 · 0 评论 -
插入排序实现
#include<iostream> using namespace std;template <class T>void insertSort(T a[],int n){ for(int i = 1;i < n;i++) { int j = i; T tem = a[i]; while(j > 0 && tem < a[j-1]) { a原创 2020-08-20 16:12:28 · 112 阅读 · 0 评论 -
递归方法实现字符串的逆转
利用深层递归实现字符串的逆转#include<iostream> #include<cstring>using namespace std;string reverse(string& s){ if(s.length() > 1) { string sub = s.substr(1,s.length()-2); return s.substr(s.length()-1,1)+sub+s.substr(0,1);原创 2020-08-20 13:06:25 · 410 阅读 · 0 评论 -
mac下Vscode如何解决检测到 #include 错误。请更新 includePath
今天编译程序出现了这样一个错误:预处理指令报错,找不到iostream文件的位置。解决方法:1、打开终端,输入gcc -v -E -x c++ -这个命令会将mac中C++头文件路径列举出来找到这几行代码:2、在Vscode左边的文件夹打开c_cpp_properties.json文件复制上图终端中任意一行文字,粘贴进json文件的includePath和compilerPath的属性值3、像这样就OK了报错消失...原创 2020-08-16 09:29:47 · 14519 阅读 · 8 评论 -
mac上Vscode出现xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)
编译C++程序时出现了这么一条报错:xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun导致程序不能运行,于是我查了一下:解决方法:1、打开终端,输入xcode-select --install2、确定安装软件,就没有报错了...原创 2020-08-16 09:17:19 · 1814 阅读 · 0 评论 -
C++快读
我们都知道C++中读入数字可以使用cin函数int a;cin >> a;但是,由于cin >>要自动检测类型等等,执行代码很冗长;而scanf按照控制符编译出了最精简的执行代码,所以速度较快int a;scanf("%d",&a);但是在一些情况下,这两种读入方式都会超时。所以快读就应运而生啦inline int read(){ int x=0,f=1; char c = getchar(); while(c<'0'||c>'9'){原创 2020-06-13 18:12:58 · 588 阅读 · 0 评论 -
visual studio不能打开资源视图,在另一个编辑器中显示
是因为你的rc文件以代码的形式打开了,(就是打开了Resource.h代码文件)因此才会报错原创 2020-01-16 11:01:16 · 1129 阅读 · 1 评论 -
安装DirectX出现error code s1023
解决办法:1、打开控制面板,选择卸载程序2、找到这两个程序并卸载3、然后就大功告成啦!原创 2020-01-09 12:09:22 · 399 阅读 · 0 评论 -
期末复习
目录期末模拟孪生素数对预约讨论环形网络期末模拟孪生素数对刚开始做的时候没有分,是因为没有注释掉输入输出语句。但是这个程序只能得80分。#include<iostream>#include<cmath>#define MAX 1000000using namespace std;int array[MAX];int count = 0;bool isPr...原创 2020-01-05 11:34:03 · 161 阅读 · 0 评论 -
VC++函数ATOM MyregisterClass(HINSTANCE hInstance)
函数ATOM MyregisterClass(HINSTANCE hInstance)这是VC帮你写的一个注册窗口类的函数,其实就是先定义了一个WNDCLASSEX 结构,然后指定一些窗口特性,调用 RegisterClassEx返回 最怕音乐学院的忽然认真,学生合唱《平凡之路》听得鸡皮疙瘩落一地 ...原创 2019-12-27 19:17:41 · 1562 阅读 · 0 评论 -
C++ STL中vector方法
vector相对于数组更好用,毕竟是大牛们写的STL嘛#include<iostream>#include<vector>using namespace std;int main(){ //1、声明向量a,包含5个1 vector<int> a(5,1); //2、返回a的第二个值 cout << a[2...原创 2019-12-27 14:40:23 · 133 阅读 · 0 评论 -
结构体指针使用方法
谈及指针,我认为不管是什么指针,其实都是指向一类数据结构的存储地址的工具。类的指针、结构体的指针都是这个方法,都可以类比于是int的指针,只不过不同类型的指向不同的数据结构。#include<iostream>#include<cstring> //使用strcpy需要cstring库using namespace std;struct man{ ...原创 2019-12-27 13:53:01 · 571 阅读 · 0 评论 -
HBITMAP略知一二(在visual studio中)
HBITMAP 是句柄;BITMAP 是实例:1、现在全局变量中声明句柄HBITMAP bmp_Grass; //背景图像资源2、通过LoadBitmap函数来加载图像资源bmp_Grass = LoadBitmap(((LPCREATESTRUCT)lParam)->hInstance, MAKEINTRESOURCE(IDB_BITMAP_GRASS));这其中的IDB_...原创 2019-12-27 15:31:39 · 654 阅读 · 0 评论