- 博客(13)
- 收藏
- 关注
原创 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 366
原创 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 312
原创 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 309
原创 两数相加(C++)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next...
2021-12-15 15:30:10 790
原创 1.5 C++细节五大函数:析构函数,拷贝构造,移动构造,拷贝赋值,移动赋值
在c++11中,类是和5个特殊的函数紧密相关的,它们是析构函数、拷贝构造函数、移动构造函数、拷贝赋值运算符和移动赋值运算符。 析构函数 只要一个对象运行越出范围,或经受一次delete,则析构函数就要被调用。典型情况下,析构函数的唯一责任就是释放掉在对象使用期间获得的资源,包括关于任意的new操作调用对应的delete,关闭任何打开的文件,等等。默认做法是对每个数据成员应用析构函数。 拷贝构造函数和移动构造函数 有两个特殊的构造函数用来构造一个新的对象,它被初始化为与另一个同样类型对象相同的状态。如
2021-11-12 19:25:36 973
原创 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 452
原创 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 561
原创 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 436
原创 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 253
原创 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 224
原创 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 322
原创 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 101
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人