C++
文章平均质量分 51
主要对C++、thrust、CUDA、OPENCL学习
li三河
图像算法、3D开发、深度学习
展开
-
(十四)C语言杂项
str为局部变量,当传递给函数时,函数不能真正使用str,用的只是str的一个备份,str的值不变。此处str的值仍然为null,malloc分配的内存地址并没有赋给str。要输出某个值的地址写成printf("%x",&变量);若变量为指针时,则应写成printf("%x",指针)指针变量存储的是地址,所以在函数调用的时候能否将指针变量传递给函数。C语言中要输出地址需要16进制的方式输出,需要用%x格式。1、printf()输出某个值的地址。2、C语言中指针变量如何向函数中传递。原创 2023-01-04 18:04:38 · 187 阅读 · 0 评论 -
(十三) C++中虚函数的作用和多态
C++中的虚函数作用主要是实现多态的机制。基类定义虚函数,子类可以重写该函数;在派生类中对基类定义的虚函数进行重写时,需要在派生类中声明该方法为虚方法。当子类重新定义了父类的虚函数后,当父类的指针指向子类对象的地址时,[即B b; A a=&b;]父类指针根据赋给它的不同子类指针,动态的调用子类的该函数,而不是父类的函数(如果不使用virtual,请看后面★*),且这样的函数调用发生在运行阶段,而不是发生在编译阶段,称为动态编译。而函数的重载可以认为是多态,只不过静态的。注意,非虚函数静态联编,效率原创 2022-04-06 11:38:19 · 108 阅读 · 0 评论 -
(十二) 关于耗时打印
用来判断某个程序耗时打印#include <chrono>int main(){ auto start = std::chrono::steady_clock::now(); int res=countNonZero(s,srcBase,s.width); //do some things auto end = std::chrono::steady_clock::now(); auto ms = std::chrono::duration_cast<std::chron原创 2022-02-14 16:46:34 · 682 阅读 · 0 评论 -
(十一) const的作用
修饰变量,说明该变量不可以被修改 修饰指针,即常量指针和指针常量 常量引用,经常用于形参类型,既避免了拷贝,又避免了函数对值的修改 修饰类的成员函数,说明该成员函数内不能修改成员变量 // 类class A{private: const int a; // 常对象成员,只能在初始化列表赋值public: // 构造函数 A() : a(0) { }; A(int x) : a(x) { }; // 初始化列表原创 2022-02-13 09:32:19 · 55 阅读 · 0 评论 -
(二) 序列容器
1、序列式容器是什么?序列容器以线性序列的方式存储元素。它没有对元素进行排序,元素的顺序和存储它们的顺序相同。array<T,N>(数组容器)是一个长度固定的序列,有N个T类型的对象,不能增加或删除元素vector<T>(向量容器)是一个长度可变的序列,用来存放T类型的对象。必要时,可以自动增加容量,但只能在序列的末尾高效地增加或删除元素。deque<T>(双向队列容器)是一个长度可变的,可以自动增长的序列,在序列的两端都不能高效地增加或删除元素。li原创 2022-01-29 14:54:47 · 1549 阅读 · 0 评论 -
(一) STL学习
vector的底层为顺序表(数组),list的底层为双向链表,deque的底层为循环队列,set的底层为红黑树,hash_set的底层为哈希表。原创 2022-01-29 14:40:21 · 339 阅读 · 0 评论 -
(十)使用数值、时间和复数计算及算法
numeric头文件定义了使数值数据处理更简单或高效的STL功能。chrono头文件提供处理时间的能力。complex头文件定义支持复数处理的类模板。1、accumulate函数用法详解可以用+运算符求出元素序列的和。前两个参数是定义序列的输入迭代器,第三个参数是和的初值,第三个参数的类型决定返回值的类型。vector<int> values={2,0,12,3,5,0,2,7,0,8};int min=3;auto sum=std::accumulate(begin(valu原创 2022-01-26 15:34:09 · 213 阅读 · 0 评论 -
(九) STL流迭代器
流迭代器是从流中读取的单通迭代器,它是一个输入流迭代器,或写入流。流迭代器只能传送给定类型的数据到流中或者从流中读取给定类型的数据。如果想用流迭代器来传送一系列不同类型的数据项,就必须将数据项打包到一个单一类型的对象中,并保证这种类型存在流插入和/或流提取运算符。基于控制台的I/O(头文件iostream):istream从流中读取;ostream写到流中去;iostream对流进行读写,从istream和ostream派生。基于文件的I/O(头文件fstream):ifstream从文件中读取,由原创 2022-01-26 15:22:19 · 233 阅读 · 0 评论 -
(八)随机数
1、uniform_int_distribution离散均匀分布类返回的是均匀分布在闭合范围[a,b]内的随机整数。std::uniform_int_distribution<> d;std::cout<<”Range from ”<<d.min() <<” to ”<<d.max()<<std::end2、uniform_real_distribution连续均匀分类std::uniform_real_distr原创 2022-01-26 15:19:53 · 83 阅读 · 0 评论 -
(七)C++常用算法
两组算法专门提供排序和合并功能,一组为给定值范围内的元素提供分区机制,另一组提供在范围内查找一个或多个元素的方法。1、sort排序算法函数模板sort<Iter>()的类型参数Iter是元素对元素对应的迭代器类型,而且必须支持随机访问迭代器,只能array,vector,deque或标准数组中的元素。std::vector<int>numbers{99,77,33,66,22,11,44,88};std::sort(std::begin(numbers),std::e原创 2022-01-26 07:57:29 · 618 阅读 · 0 评论 -
(六)set容器
集合可以是由两个迭代器定义范围内的一系列对象,也可以是一种有特殊特征的容器类型。除了没有单独的键,set容器和map容器很相似。有序set的模板定义在set头文件,无序set的模板定义在unordered_set头文件中。因此有序set包含的元素必须支持比较运算,无序set中的元素必须支持哈希运算。定义set容器的模板如下:set<T>容器保存T类型的对象,而且保存的对象时唯一的,其中保存的元素是有序的。可以用相等、不相等来判断对象是否相同。multiSet<T>容器和s原创 2022-01-26 07:51:45 · 1730 阅读 · 0 评论 -
(五) map容器
map容器是关联容器的一种。在关联容器中,对象的位置取决于和它关联的键的值。键可以是基本类型,也可以是类类型。字符串经常被用来作为键,如果想要保存姓名和地址的记录,就可以这么使用。名称通常可能是一个或多个字符串。关联容器中的对象位置的确定取决于容器中的键的类型,而且对于特定容器类型的内部组织形式。map容器有4种,每一种都是由类模板定义的。所有类型的map容器保存的都是键值对类型的元素。map容器的元素是pair<const K,T>类型的对象,这种对象封装一个T类型的对象和一个与其关联的K原创 2022-01-26 07:39:30 · 443 阅读 · 0 评论 -
(四)C++序列容器存储智能指针详解
通常用容器保存指针比保存对象更好,保存智能指针比原生指针好。在容器中保存指针需要复制指针而不是它所指向的对象。复制指针通常比复制对象快。在容器中保存指针可以得到多态性。存放元素基类指针的容器也可以保存其派生类型的指针。对指针容器的内容进行排序的速度要比对对象排序快,因为只需要移动指针,不需要移动对象。保存智能指针要比保存原生指针安全,因为在对象不再被引用时,自由存储区的对象会被自动删除。这样就不会产生内存泄漏。不指向任何对象的指针默认为nullptr.主要有两种类型的智能指针:uni..原创 2022-01-26 07:36:56 · 2252 阅读 · 0 评论 -
(三) 容器适配器
容器适配器是一个封装序列容器的类模板。stack<T>:是一个封装deque<T>容器的适配器类模板,默认实现的是一个后入先出的压入栈。stack<T>模板定义在头文件stack中。queue<T>:是一个封装deque<T>容器的适配器类模板,默认实现的是一个先入先出的队列。queue<T>模板定义在头文件queue中。priority_queue<T>:是一个封装vector<T>容器的适配器类模原创 2022-01-26 07:31:14 · 246 阅读 · 0 评论 -
CUDA中使用thrust进行排序和注意事项
在CUDA中进行排序时,如果用自定义cuda十分耗时,我们选择cuda自定义函数进行测试,选择thrust::sort函数,新建文件,命名为sort.cu,代码如下:#include <thrust/host_vector.h>#include <thrust/device_vector.h>#include <thrust/generate.h>#include <thrust/sort.h>#include <thrust/copy.h原创 2021-12-23 20:42:11 · 3180 阅读 · 0 评论