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