c++基础[..ing]

随笔:

1.pair, map, set, multimap, multiset:

pair

create:

pair var(param, param) ;3

pair var = make_pair(param, param);

pair var = pair(param, param);

use:

var.first var.second

map

member:

::key_type;key

::mapped_type;value

::value_type;pair

::iterator

insert:

var[key] = xx;

var.insert(pair);3

search:

var.find()iterator

var.count()num=1?0

delete:

var.erase()

set

same as map except:

insert:

no var[key] = xx;

member:

no ::value_type;

::mapped_type == ::key_type;

multimap

same as map except:

delete:

var.erase(search_item);

search:3

sz_type num= authors.count(search_item);

m.equal_range(pair);

2. 函数重载, 选择成员实现还是非成员实现?

必须, 成员: = [] () ->

一般情况, 成员: +=, -=, *=, 复合运算. ++,--改变对象状态的.

一般情况, 非成员: + - * /算数 , > == <= 逻辑判断, | &位运算.

总结: 赋值,修改自身的,定义为成员. why?only can find in using.

3. 容器

init:

初始化,复制: vector ivec1(ivec2) , 必须相同的容器类型和元素类型: ivec2必须是vector

初始化,迭代器: vectorivec1(arr, arr+6), vectorivec1(itora1, itora1+6), 不需要相同的容器类型和元素类型, 兼容即可: arr类型double->vector

constraint:

原则: 必须能复制, 赋值.

禁止, I/0类: 不能复制,赋值.

默认, 用户类: 有默认复制初始化, 赋值实现.

iterator opera only vector&deque:

iter + n, iter - n : step over add, subtraction.

>, >=, <, <= : compare opera

nosupport eg: list

iterator opera only list&deque:

c.push_front

iterator update:

push

insert

begin, end:

[begin, end)

Relational operators:

, <: less comp {1, 2, 3} < {1, 2, 4, 1, 1}

!=, ==: length&item comp {1, 2, 3} != {1, 2, 3, 1}

user_class: must add opera <, >, !=, == eg: vector a, b;

size:

v.max_size()= 1000000000. 不用resize.

程序员保证参数有效

c.erease(p) p

c.erase(b, e) b,e

c.pop_back() c

c.pop_front() c

迭代器失效

--------change---------

c.erease(p) p

c.erase(b, e) b,e

c.pop_back() c

c.pop_front() c

deque: 首部,尾部,插入不失效. 中间插入失效.

--------unchange--------

c.swap()

Vector容器 max_size() & capacity() & reserve()

http://support.microsoft.com/kb/158621/zh-cn
max_size, physical memry can bigest contain size
capacity, now memry malloc size
reserve, first time memry malloc size

vector, deque, list选择

1.

deque: 中间插入删除效率低, 两端插入删除效率高

vector: 插入删除效率低, 查找快

list: 插入删除效率好, 查找要遍历

2.

除非找到使用其他容器的更好理由, 否则vector容器都是最佳选择.

Sring也是一种容器

string包含容器的通用方法: Iterator, find, size...

同时有一些特有方法: compare, insert(pos, s)...



*文件*

模式

app :追加, 并建立文件

binary : 2进制

trunc : 清空

判断打开失败

if (fs.fail()) return;

if (!infile) return;

循环打开文件

避免上一个流遗留的错误状态.

ifstream& open_file(ifstream &in, const string &file){    in.close();          //close file    in.clear();          //clear in_status    in.open(file.c_str());    //open new    return in;}

获取行

方式1: infile >> str

方式2: getline(infile, str)

全部读取

in.read(buff, size)

Virtual


c++基础[..ing]c++基础[..ing]代码

class BookItem{public:    BookItem():ISBN(0){}public:    int ISBN;    virtual void PrintISBN()    {        cout << "BookItem:" << ISBN << endl;    }};class BookMath:public BookItem{public:    void PrintISBN()    {        cout << "BookMath:" << ISBN << endl;    }};void virtual_param(BookItem &bi){    bi.PrintISBN();}void virtual_test(){//    1    BookItem bi1;    BookMath bm1;    BookItem &pbi= bi1;//     bi1.PrintISBN();//     bm1.PrintISBN();    virtual_param(bm1);}

参数定成父类

virtual

传的父类,就调用父类的。

传的子类,就调用子类的。

非virtual

传的父类,子类,都调用父类

**

****

**默认构造函数****

1. 有了带参构造函数:必须显示声明默认构造函数,必须手动初始化变量.

**

****

**复制控制****

复制构造函数 + 赋值运算符

**

****

继承

继承方式: public, private, protect

默认构造: 默认调用基类构造

构造函数: 显示调用基类构造, 可以设置默认实参

Virtual: 对需要子类修改的函数增加Virtual

  1. 只能初始化直接基类.

  2. 只能通过构造函数初始化.不能直接访问基类成员初始化.

复制和赋值不虚构

没有意义.

派生类析构

  1. 必须显示调用

2.先析构派生类, 再析构基类, 与构造函数相反.

虚析构

  1. 基类是虚析构, 派生类自动都声明为虚析构

  2. 即使不释放, 基类也应该有个空虚析构.

派生类构造

  1. 派生, 基类都有合成默认构造

  2. 制定构造函数,先构造基类, 再构造子类.

合成操作符

即: 系统提供的操作符

合成默认构造函数

合成复制构造函数

合成赋值操作符

**类组成****



**#TODAY QUESTION****

  1. 析构函数何时用, 怎么用?

  2. 虚析构函数怎么用?

  3. 赋值函数, 赋值构造函数, 析构函数虽然, 类自动合成, 但是何时需要自己手动写? 是不是每个类都要写?

  4. 构造函数, 只初始化部分变量的情况, 其他变量是否会默认初始化为0?

  5. 类的设计. 设计成什么样子, 哪些成员必须有, 哪些程序不必须有.

**

****

#Record

vector::const_reverse_iterator rit = vec1.rbegin();

list::iterator iter = find(slist.begin(), slist.end(), searchValue);
原文链接: https://www.cnblogs.com/oleeceo/archive/2010/12/21/1913083.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/19074

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午8:02
下一篇 2023年2月7日 下午8:03

相关推荐