C++学习记录

  1. 常量

#define 常量名 常量值

const 数据类型 常量名 = 常量值

  1. 数据类型

整型 short int long long long

浮点型 float double

字符型 表示单个字符的变量 char ch -'a' (int)ch 十进制数字

转义字符 \n换行 \r回车 \\ 表示“\” \t水平制表

字符串型 char str1[] = "hello world" string 变量名 = “字符串值”

布尔类型

数据输入 cin >>变量

数组 int arr[5]; 元素个数sizeof(arr)/sizzeof(arr[0]),(int)arr 数组地址(int) &arr[0]

  1. sizeof可以统计数据类型所占内存大小

  1. 函数 int add (int num1,int num2){return num1+num2}

  1. 值传递,值传递时,型参发生改变,不影响实参

  1. 指针 int a =0; int * p; p=&a; 使用指针: 解引用 *p=1000; 32位占4个字节,64位占8个字节

  1. const int *p =&a;常量指针:指针的指向可以修改,但指针指向的值不可以改

  1. int * const p = &a;指针c常量,指针的指向不可以修改,但指针指向的值可以改

  1. const int * const p =&a;

  1. swap(&a,&b); void swap(int *a,int *b){...}

  1. 结构体 struct Student{}; struct Student s1; s1.name = "张三"

  1. 结构体数组 struct Student stuArr[3] = {...}

代码区,全局区,栈区,堆区

1.深浅拷贝问题

浅拷贝是编译器自己的方法,==操作

深拷贝是在堆区开辟一块空间进行拷贝

  1. 继承 class Java : public BasePage 语法 class 子类 : 继承方式 父类 3.通过子类对象访问父类的同名成员,需加作用域 s.Base::m_A

  1. 需继承解决菱形问题

  1. 多态:分为静态多态和动态多态 virtual//虚函数 virtual void speak(){...}

  1. 虚析构,释放子类对象在堆中开辟的数据释放,解决父类指针释放子类对象时不干净的问题

  1. 文件操作:文本文件 二进制文件 ofstream:写操作 ifstream:读操作 fstream:读写操作 ios::in为读打开文件 ios::out ios::ate ios::app 追加写ios::trunc ios::binary 二进制写

  1. 函数模板 template<typename T> void swap(T &a,T &b)

vector存放数据

1.vector放置内置数据类型

#include<vector>
#include<algorithm>//标准算法头文件
//放置内置数据类型
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
vector<int> :: iterator itBegin=v.begin();
vector<int> :: iterator itEnd=v.end();
//遍历第一种方式
while(itBegin != itEnd)
{
    cout<<*itbegin<<endl;
    itBegin++;
}
//第二种遍历方式
for(vector<int>::iterator it=v.begin();it!=v.end();i++)
{
 cout<<*itbegin<<endl;
}
void myPrint(int val)
{cout<< val<<endl;
}
//第三种方式
for_each(v.begin(),v.end(),myParint);

2.vector放置自定义数据类型

#include<vector>
class Person
{
public:
    Person(string name,int age){
    this->m_Name=name;
    this->m_Age=age;
    }
    string m_Name;
    int m_Age;
}
void test01()
{
 vector<Person> v;
 Person p1("aaa",10);
 Person p2("aaa",20);
Person p3("aaa",30);
Person p4("aaa",40);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
for(vector<Person>::iterator it=v.begin();it!=v.end();it++){
    cout<<"姓名:"<< (*it).m_Name<<endl;
     cout<<"姓名:"<< it->m_Name<<endl;
}

}
void test02()
{
 vector<Person*> v;
 Person p1("aaa",10);
 Person p2("aaa",20);
Person p3("aaa",30);
Person p4("aaa",40);
v.push_back(&p1);
v.push_back(&p2);
v.push_back(&p3);
v.push_back(&p4);
for(vector<Person*>::iterator it=v.begin();it!=v.end();it++){
    cout<<"姓名:"<< (*it)->m_Name<<endl;
    }

}

3.vector容器嵌套容器

void test01()
{
 vector<vector<int>> v;
 vector<int> v1;
  vector<int> v2;
 vector<int> v3;
 vector<int> v4;
for(int i=0;i<4,i++){
v1.push_back(i+1);
v2.push_back(i+2);
v3.push_back(i+3);
v4.push_back(i+4);
}
v.push_back(v1);
v.push_back(v2);
v.push_back(v3);
v.push_back(v4);

 for(vector<vector<int>>::iterator it=v.begin();it!=v.end();it++){
 for(vector<int>::iterator vit=(*it).begin();vit!=(*it).end();vit++){
 cout<<*vit<<" ";
 }
    cout<<endl;
    }

4.vector赋值操作

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())
v1.empty//是否为空
v1.capacity()//v1的容量
v1.size()//v1的大小
v1.resize(15)//重新指定大小
push_back()//尾部插入
pop_back()//删除最后一个元素
insert(pos,ele)//指定位置插入
erase(pos,ele)//删除指定位置
clear();//清空
v1[i]//访问元素
v1.at(i)//访问元素
v1.front()//获取第一个元素
v1.back()//获取最后一个元素
v1.swap(v2);//交换容器 可以收缩空间
v.reserve();//预留空间

string容器

  1. string的构造函数

string s1;
const char * str = "hello word";
string s2(str);
string s3(s2);
string s4(10,'a');//aaaaaaaaaa

  1. string拼接

string str ="我"
str+="爱玩游戏"
str.append("game asd")
//查找rfind从右往左查
str.find("cz")
str.rfind("cz")
//替换
string str1 ="abcdf"
str1.replace(1,3,"1111")//a1111bcdf

  1. 字符串比较

string str1="hello";
string str2="hello";
int ret = str1.compare(str2);
//插入
str1.instert(1,"111");//h111ello
//删除
str1.erase(1,3);
//截取
str1.substr(0,3)

deque容器

双端数组

stack容器

栈容器 push() pop() top(),先进后出

queue容器

先进先出的数据结构push() front()

list容器

链表结构 sort()排序 从小到大 reverse()反转

排序规则:按年龄升序,按身高降序

bool comparePerson(Person &p1,Person &p2)
{
    if(p1.m_Age==p2.m_Age)
    {
        return p1.m_Height>p2.m_Height;
    }
    return p1.m_Age<p2.m_Age;
}

L1.sort(comparePerson);

set/mutiset容器

所有元素都会在插入的同时自动排序,set不允许有重复的元素 s1.insert

mutiset允许有重复元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值