![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法:C++
渣硕小仝
渣硕一枚~ 将不定期更新技术或其他想更新的帖子,开始写博客的初衷是为了22年秋招做准备,将平时科研课题、找工作相关学到的技术进行总结保留,也希望可以一直流传下去。现研究方向:雷达通信一体化、三维视觉、深度学习、定位与导航等
展开
-
1.6.4 函数对象
//泛型findMax,带有一个函数对象,Version //前提:a.size()>0 template <typename Object,typename Comparator> const Object & findMax(const vector<Object> & arr, Comparator cmp) { int maxIndex = 0; for(int i=1;i<arr.size();++i) i.原创 2022-01-03 15:56:23 · 370 阅读 · 0 评论 -
1.6.2 类模板
/** *一个模拟内存单元的类 */ template <typename Object> class MemoryCell { public: explicit MemoryCell(const Object & initialValue = Object{}) : storedValue{initialValue}{} const Object & read() const { return storedValue;} .原创 2022-01-03 11:43:18 · 318 阅读 · 0 评论 -
1.6.1 C++笔记:函数模板
类型无关:算法的逻辑不依赖存储在数组中的项的类型。 一个函数模板不是一个具体的函数,而是可以变成一个函数的型式 /** *返回数组a中的最大项 *假设a.size()>0. *可比较的对象必须提供operator<和operator= */ template<typename Comparable> const Comparable & findMax(const vector<Comparable> & a) { int maxIndax原创 2022-01-02 21:33:22 · 314 阅读 · 0 评论 -
1.5 C++细节五大函数:析构函数,拷贝构造,移动构造,拷贝赋值,移动赋值
在c++11中,类是和5个特殊的函数紧密相关的,它们是析构函数、拷贝构造函数、移动构造函数、拷贝赋值运算符和移动赋值运算符。 析构函数 只要一个对象运行越出范围,或经受一次delete,则析构函数就要被调用。典型情况下,析构函数的唯一责任就是释放掉在对象使用期间获得的资源,包括关于任意的new操作调用对应的delete,关闭任何打开的文件,等等。默认做法是对每个数据成员应用析构函数。 拷贝构造函数和移动构造函数 有两个特殊的构造函数用来构造一个新的对象,它被初始化为与另一个同样类型对象相同的状态。如原创 2021-11-12 19:25:36 · 998 阅读 · 0 评论 -
1.5 C++细节:返回值传递
在C++中,所使用的最直接的机制是传值返回。 double average(double a,double b); //返回a和b的平均值 LargeType randomItem(const vector<LargeType> & arr); //返回右值arr中的随机项 vector<int> partialSum(const vector<int> & arr); //在c++11中高效 首先考原创 2021-11-11 16:45:43 · 463 阅读 · 0 评论 -
1.5 C++细节:参数传递
考虑下面三个函数声明 double average( double a,double b); //返回a和b的平均值 void swap(double a ,double b); //返回a和b;参数类型错误 string randomItem( vector<string> arr); //返回arr中的一个随机项 传值调用保证,无论函数swap如何实现,x和y都将保持不变。现在我们需要的是声明a和b为引用型参数: void swap(d原创 2021-11-11 15:05:46 · 567 阅读 · 0 评论 -
1.5 C++细节: 左值、右值和引用
一个左值是一个标识非临时性对象的表达式。一个右值是一个标识临时性对象的表达式,或者是一个不与任何对象相联系的值。 vector<string> arr(3); const int x = 2; int y; ... int z=x+y; string str="foo"; vector<string> *ptr=&arr; 左值引用的声明是通过在某个类型后放置一个符号&来进行的。此时,一个左值引用成为了它所引用的对象的同义词。例如 string str =原创 2021-11-10 19:54:16 · 445 阅读 · 0 评论 -
1.5 C++细节:指针(pointer)
指针变量是一种存放另一对象所占用的地址的变量。 int main() { IntCell *m; m = new IntCell{0}; m->write(5); cout<<"Cell contents:"<<m->read()<<endl; delete m; return 0; } 声明 第三行是关于m的声明。星号*表明m是一个指针变量,允许指向一个IntCell对象。m的值是它所指向的原创 2021-11-10 17:04:34 · 260 阅读 · 0 评论 -
1.4 C++类: vector类和string类
#include <iostream> #include <vector> using namespace std; int main() { vector<int> squares(100); for(int i=0;i<suares.size();++i) squares[i]=i*i; for(int i=0;i<suares.size();i++) cout<<i<<.原创 2021-11-07 12:16:57 · 231 阅读 · 0 评论 -
1.4 C++类:接口与实现的分离
图一展示了IntCell类的接口,图二提供了类接口的实现,图三则给出一个用到IntCell的main例程。 #ifndef IntCell_H #define IntCell_H /** * 一个模拟整数单元的类 */ class IntCell { public: explicit IntCell(int initialValue=0); int read() const; void write(int x); private: int...原创 2021-11-06 21:19:15 · 333 阅读 · 0 评论 -
1.4 C++类:构造函数的附加语法和访问函数
/** * 一个模拟整数内存单元的类 */ class IntCell { public: explicit IntCell(int initialValue = 0) : storedValue{initialValue} {} int read() const {return storedValue;} void write(int x) {storedValue = x;} private: int storedVal.原创 2021-11-05 13:41:10 · 109 阅读 · 0 评论 -
C++类:基本的C++语法(笔记)
参考书籍:数据结构与算法分析——C++语言描述原创 2021-11-05 13:01:06 · 190 阅读 · 0 评论