
c++
zzyzgg
MPI+CUDA苦手
展开
-
vector二维数组的初始化
之前我一直以为vector不能用vec = {1,2,3}这种方式直接定义,直到我看到下面的代码vector<vector<int> >num = { { 1, 1, 1, 0, 1, 1 }, { 1, 0, 1, 1, 1, 1 }, { 1, 1, 1, 0, 0, 1 }, { 1, 0, 1, 0, 0, 1 }, { 1, 1, 1, 1, 1, 1 }...原创 2019-11-21 11:01:59 · 2814 阅读 · 0 评论 -
C++ 用数组初始化vector的两种方式
int myints[] = { 10, 20, 30, 40, 50, 60, 70 };//方法1std::vector<int> myvector(7);std::copy(myints, myints + 7, myvector.begin());//方法2vector<int> vec(begin(myints), end(myints));...原创 2019-11-20 17:14:25 · 1154 阅读 · 0 评论 -
空指针的地址为0
偶然看到一个求空指针的地址的代码#include <iostream>using namespace std;struct AInfo { int a; int b; int c;};int main(){ AInfo* pinfo = NULL; int value = (int)(&(pinfo->c)); cout << &...原创 2019-10-16 14:53:47 · 1870 阅读 · 0 评论 -
关于const int * ,int const * 以及 int * const 的区别
1.常量指针int * const p;一个常量指针,必须初始化,之后它指向的地址就不能改变。就因为它是常量。常量是不可以被赋值的。#include <iostream>using namespace std;int main(){ int i = 10; int j = 20; int * const p = &i; p = ...转载 2019-08-21 15:02:11 · 921 阅读 · 0 评论 -
C++内联函数(C++ inline)详解
使用函数能够避免将相同代码重写多次的麻烦,还能减少可执行程序的体积,但也会带来程序运行时间上的开销。函数调用在执行时,首先要在栈中为形参和局部变量分配存储空间,然后还要将实参的值复制给形参,接下来还要将函数的返回地址(该地址指明了函数执行结束后,程序应该回到哪里继续执行)放入栈中,最后才跳转到函数内部执行。这个过程是要耗费时间的。另外,函数执行 return 语句返回时,需要从栈中回收形参和局...转载 2019-08-25 10:33:08 · 196 阅读 · 0 评论 -
TCP四次挥手
四次挥手所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发,整个流程如下图所示:由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个...转载 2019-08-24 13:51:02 · 129 阅读 · 0 评论 -
被调函数分配的内存有哪些能被主调函数使用
结论:栈不可以用,堆和全局区的内存可以用。转载 2019-07-29 21:24:26 · 269 阅读 · 0 评论 -
C++ pair的基本用法总结(整理)
1,pair的应用pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。其标准库类型--pair类...转载 2019-05-23 14:19:21 · 164 阅读 · 0 评论 -
strcpy简单用法
用于字符数组拷贝,面试题中常会用到。有两个参数strcpy(char *b,char *a)第二个参数向第一个参数传值, 注意要先为b申请内存空间#include<iostream>using namespace std;void main(){ char *a = "aaaaaaa"; char *b = new char[strlen(a) + 1];...原创 2019-08-28 09:50:57 · 1047 阅读 · 0 评论 -
C++数组引用传递
引用传递似乎有两种方式,一种指定长度的方式,一种模板类的方式void pp(int(&ch)[8]){ //int len = strlen(ch); cout << sizeof(ch)/sizeof(ch[0]);}template<class T>int length(T& arr){ //cout << sizeo...原创 2019-09-04 17:51:29 · 3446 阅读 · 0 评论 -
gcc下数据类型字节数
C类型 32 64 char 1 1 short int 2 2 int 4 4 long ...原创 2019-09-09 13:13:05 · 694 阅读 · 0 评论 -
vector二维数组根据某列排序
写一个bool类型的comp函数,比如下面根据第二个元素排序:bool cmp1(const vector<int> &a, const vector<int> &b){ return a[1] > b[1];}sort(allvec.begin(), allvec.end(), cmp1)...原创 2019-09-17 21:32:19 · 1690 阅读 · 0 评论 -
Hashmap结构
数组+链表一个node中存储key-value对,以及链表中下一个node的指针。存储过程一个key-value过来,使用hashcode()函数根据key计算出hashcode,然后拿hashcode的高16位和低16位相异或。然后这个hashcode就作为key-value对,即数组的下标,如果当前下标已经有一个node了,就把这个node接到前面那个node的下面链表。异...原创 2019-09-29 14:59:34 · 135 阅读 · 0 评论 -
字符串1级指针内存模型
#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h>#include <string.h>#include <stdio.h>void main61(){ char buf[20]= "aaaa"; //定义并且初始化 char buf2[] = "bbbb"; char *p1 = "11...原创 2019-05-27 16:46:34 · 108 阅读 · 0 评论 -
指针和数组变量的区别
char *p = NULL; char buf5[128] = "absadsad"; for (i=0; i<strlen(buf5); i++) { printf("%c ", buf5[i]); } p = buf5; //buf 代表数组首元素的地址 for (i=0; i<strlen(buf5); i++) { printf("%...原创 2019-05-27 16:36:22 · 170 阅读 · 0 评论 -
vector中resize()和reserve()区别
resize一个vector,相当于给其创建了n个元素,可以直接访问。 reverse的话,相当于申请了n个元素的空间,不可以直接访问,当push_back的时候,就是把元素放到这些空间里。同时牵扯到size()和capacity()的区别,size()相当于已经拥有的元素大小,而capacity()是能够装下的元素大小,当前可能并没有那么多元素,对应reverse。...原创 2019-04-26 08:49:29 · 278 阅读 · 0 评论 -
static 和const分别怎么用
6.static 和const分别怎么用,类里面static和const可以同时修饰成员函数吗?static的作用:对变量:1.局部变量:在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。1)内存中的位置:静态存储区2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)3)作用域:作用...转载 2019-04-26 09:28:58 · 4762 阅读 · 0 评论 -
typedef关键字
typedef关键字的作用:给数据类型定义一个新名字,1. 提高了移植性2. 简化复杂的类型声明,提高编码效率3. 解释数据类型的作用转载 2019-04-26 10:22:55 · 193 阅读 · 0 评论 -
C++笔记:派生类到基类转换到可访问性
C++笔记:派生类到基类转换到可访问性要确定到基类的转换是否可访问,可以考虑基类的public成员是否可访问,如果可以,转换是可以访问的,否则,转换是不可访问的。如果是public继承,则用户代码和后代类都可以使用派生类到基类的转换。如果类是使用private或protected继承派生的,则用户代码不能将派生类型对象转换为基类对象。如果是private继承,则从private继承类派...转载 2019-04-17 16:10:13 · 171 阅读 · 0 评论 -
#define用法详解
1.#define的作用 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。 在C或C++语言中,“宏”分为有参数和无参数两种。2.无参宏定义 无...转载 2019-04-17 21:30:12 · 318 阅读 · 0 评论 -
【C++】intialization list 和 assignment
intialization list指的是初始化列表.Assignment 指的是赋值.什么是初始化列表:构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。class foo{ string name; int id; foo(string s, int i):name(s), id(i)...转载 2019-04-17 21:48:26 · 482 阅读 · 0 评论 -
C++面试题
9.在什么时候需要使用“常引用”? 如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。常引用声明方式:const类型标识符&引用名=目标变量名;例1int a ;const int &ra=a;ra=1; //错误a=1; //正确例2string foo( );void bar(string &a...转载 2019-04-17 21:52:47 · 183 阅读 · 0 评论 -
多态相关面试题
面试题1:请谈谈你对多态的理解多态的实现效果多态:同样的调用语句有多种不同的表现形态;(同样一个函数在不同的子类、父类中穿梭的时候表现出不同的形态。)多态实现的三个条件有继承、有virtual重写、有父类指针指向子类对象。多态的C++实现是通过虚函数重写实现。virtual关键字,告诉编译器这个函数要支持多态;不是根据指针类型判断如何调用;而是要根据指针所指向的实际对象类型...转载 2019-04-18 14:41:05 · 167 阅读 · 0 评论 -
经典面试题之new和malloc的区别
new和malloc的区别是C/C++一道经典的面试题,我也遇到过几次,回答的都不是很好,今天特意整理了一下。0.属性new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。1.参数使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。...转载 2019-04-18 19:44:35 · 359 阅读 · 0 评论 -
阿里C++面试题
1. new和malloc的区别。 详细参考:链接new是运算符,malloc()是一个库函数; new会调用构造函数,malloc不会; new返回指定类型指针,malloc返回void*指针,需要强制类型转换; new会自动计算需分配的空间,malloc不行; new可以被重载,malloc不能。2. 内存泄漏的解决方法:养成良好的编码习惯和规范,记得及时释放...原创 2019-04-18 19:54:17 · 1197 阅读 · 0 评论 -
(*a)[]与*a[]的区别
(*a)[]与*a[]的区别要注意符号优先级问题,(*a)[]表示*a首先要是一个指针,这个指针指向的数据类型是一个数组,这叫数组指针可以相当于二维数组用int(*k)[3] = new int[5][3];k[1][1] = 2;k[1][2] = 3;*a[]优先级是先算a[],表示a首先要是一个数组,再算*,就是数组里面每一个元素都是一个指针,这叫指针数组*a+...原创 2019-04-23 22:55:33 · 2753 阅读 · 0 评论 -
C++创建对象的三种方式
#include <iostream> usingnamespacestd; classA { private: intn; public: A(intm):n(m) { } ~A(){} }; intmain() ...转载 2019-04-24 12:48:35 · 125 阅读 · 0 评论 -
C++ 解析什么叫“class”类型重定义还有解决方法
class类型重定义 ,顾名思义就是重复定义了。比如你定义了一个类 class A 然后你在后面写代码的时候,又定义了一个相同名字的类class A 那么编译的时候就会出现这样的错误提示。出现这样的问题,有可能是头文件加载加载引起。解决方法,可以通过在头文件最上方写: #ifndef XXXXXXX #define XXXXXXX 文件最后 #endif...转载 2019-04-24 12:49:35 · 9363 阅读 · 2 评论 -
关键字static的作用
1、 关键字static的作用是什么?正确答案:这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3). 在模块内,一个被声明为静态的函数只可被这...转载 2019-05-05 12:21:14 · 60188 阅读 · 0 评论 -
转【STL】vector的五种构造函数
void test_vector_constructor(){ // 0. Create an empty vector v0 std::vector<int> v0; assert(v0.empty()); // 1. Create a vector v1 with 3 elements of default value 0 std::vector<int&g...转载 2019-05-06 17:17:15 · 623 阅读 · 0 评论 -
网易笔试题
#include<iostream>//网易笔试题第一题/*给定一个棋盘M、N,小球的初始位置Ax、Ay,初始方向V(1左上,2右上,3右下,4左下),时间time,求最终小球位置*/using namespace std;bool wall(int Ax, int Ay, int M, int N, int &Vx, int &Vy, int &a...原创 2019-05-10 10:42:16 · 423 阅读 · 0 评论 -
C++ ofstream和ifstream详细用法
原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/database/460/11433960.sh [导读] ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O. ...转载 2018-07-31 22:12:10 · 219 阅读 · 0 评论