c++笔记

这篇C++笔记详细介绍了STL中的各种容器,如vector、deque、stack、queue、list、set/multiset、map/multimap,以及指针、string的使用。还涵盖了函数对象、谓词、内建函数对象和常用算法,如遍历、转换等操作。
摘要由CSDN通过智能技术生成

C++笔记

指针
int (*p)[4];//指向一维数组的指针变量
int *p[5]; //数组元素均为指针变量的数组;
const int*;
int const*;
//指向常量整型的指针

int* const;
//常量指针,即指针恒久只指向这一个地址;
//具体指针所指向的内容是可改变的。

int *const *;
//指向常量指针的指针

const int* const;
int const* const;
//指向常量指针的指针,这个指针是常量,也即这个指针所指向的地址不变

int const * const *;
const int * const *;
//指向常量指针的常量指针的指针233,反正就是从右往左读~

利用虚析构可以解决父类指针释放子类对象不干净的问题。

const int*;
int const*;
//指向常量整型的指针

int* const;
//常量指针,即指针恒久只指向这一个地址;
//具体指针所指向的内容是可改变的。

int *const *;
//指向常量指针的指针

const int* const;
int const* const;
//指向常量指针的指针,这个指针是常量,也即这个指针所指向的地址不变

int const * const *;
const int * const *;
//指向常量指针的常量指针的指针233,反正就是从右往左读~

有虚函数可以被实例化,

纯虚函数是抽象类,无法实例化,且必须重写。

利用虚析构可以解决父类指针释放子类对象不干净的问题。

虚析构和纯虚析构共性:

  • 可以解决父类指针释放子类对象
  • 都需要具体函数实现

区别:

  • 纯虚析构该类属于抽象类,无法实例化对象。
string

构造:

string s1; //创建空字符串,调用无参构造函数
const char* str = "hello world"; string s2(str); //把c_string转换成了string
string s3(s2); //调用拷贝构造函数
string s4(10, 'a');

赋值:

str1 = "hello world";
str2 = str1;
str3 = 'a';
str4.assign("hello c++");
str5.assign("hello c++",5);//前5个赋给str5
str6.assign(str5);
str7.assign(5, 'x');//5个x

拼接:

string str1 = "我";  str1 += "爱玩游戏";
string str2 = "LOL DNF"; str1 += str2;
str3.append(" love ");
str3.append("game abcde", 4);//前4个
str3.append(str2, 4, 3); // 从下标4位置开始 ,截取3个字符,拼接到字符串末尾

查找替换:

int pos = str1.find("de");
pos = str1.rfind("de"); // rfind从右边找
int find(const char* s, int pos, int n) const; //从pos位置查找s的前n个字符第一次位置

//替换
string str1 = "abcdefgde";
str1.replace(1, 3, "1111");

//比较
int ret = s1.compare(s2);

//字符修改
str[0] = 'x';
str.at(1) = 'x';


str.insert(1, "111");
str.erase(1, 3);  //从1号位置开始3个字符

string s = str.substr(1,5)
vector

不同之处在于数组是静态空间,而vector可以动态扩展, vector容器的迭代器是支持随机访问的迭代器

构造:
vector<int> v1; //无参构造
vector<int> v2(v1.begin(), v1.end());
vector<int> v3(10, 100);
vector<int> v4(v3);
赋值
vector<int> v1; //无参构造
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
	}
	
vector<int>v2;
	v2 = v1;

vector<int>v3;
	v3.assign(v1.begin(), v1.end());

vector<int>v4;
	v4.assign(10, 100);	
	
大小
empty(); //判断容器是否为空

capacity(); //容器的容量

size(); //返回容器中元素的个数

resize(int num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。

//如果容器变短,则末尾超出容器长度的元素被删除。

resize(int num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。

//如果容器变短,则末尾超出容器长度的元素被删除
操作
push_back(ele); //尾部插入元素ele
pop_back(); //删除最后一个元素
insert(const
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值