当前位置:网站首页 > C++编程 > 正文

c加加编程入门(C加加编程入门教学)



基本数据类型:

int 用于表示整数 float 用于表示单精度浮点数 double 用于表示双精度浮点数 char 用于表示字符 bool 用于表示布尔值,只能取 或 void 表示无类型,通常用于函数返回类型或指针类型

复合数据类型:

数组 由相同类型的元素组成的集合 结构体() 由不同类型的成员组成的复合类型 枚举() 一组具有命名值的常量 类() 一种封装数据和操作的方式,支持面向对象编程 指针() 存储内存地址的变量,用于间接访问内存中的数据 引用() 提供现有变量的别名,用于简化代码和避免复制

引例:

 
  

算数运算符

/可以是两个小数相除,若是两个整数相除则结果向下取整

%为取模

递增递减

++ 前置递增 a=2,b=++a a=3,b=3 ++ 后置递增 a=2,b=a++ a=3,b=2 -- 前置递减 a=2,b=--a a=1,b=1 -- 后置递减 a=2,b=a-- a=1,b=2

所谓前置就是先加1,后置就是先运算

逻辑运算符

运算符 术语 示例 结果 ! 非 !a 若a为假则!a为真 && 与 a&&b 若a与b都为真则为真,否则为假 || 或 a||b 若a与b有一个为真则为真,否则为假

一维数组

3种定义方式:

1)数据类型 数组名[数组长度];

2)数据类型 数组名[数组长度] = {值1,值2,……}

注意:若实际值与长度不同时,自动用0补足

3)数据类型 数组名[] = {值1,值2,……}

 
  
获取首地址

两种方式:arr或&arr[0]

数组长度统计
 
  
冒泡排序(后文具体介绍)
  1. 比较相邻元素: 从第一个元素开始,比较相邻的两个元素,如果它们的顺序不正确(比如在升序排序中,前一个元素大于后一个元素),则交换它们。
  2. 一次遍历完成: 经过一次遍历,最大(或最小)的元素会被移到序列的最后位置。
  3. 重复步骤1和2: 重复进行上述步骤,直到序列完全有序。在每次遍历中,待排序序列的长度减一,因为每次遍历都会将一个元素放置到了正确的位置上

二维数组

定义方式

二维数组定义的4种方式:

1)数据类型 数组名[ 行数 ][ 列数 ];

2)数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2} ,{数据3,数据4} };

3)数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};

4)数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4}

注意:常用第二种,可读性较强

 
  
计算行数与列数

二维数组的行数:

二维数组的列数:

地址

二维数组首地址: 或 

二维数组第1个元素的地址:  或 

二维数组第 0 行的地址: 或或 

二维数组第 i 行的地址:或

二维数组第 i 行首元素的地址:或或或

二维数组第 i 行第 j 列元素的地址:或

for循环

 
  

while循环

while(表达式)语句;

while(表达式){

    语句1;

    语句2;

}

例:用while打印数组

 
  

do-while循环

do{

    语句1;

    语句2;

}

while(条件表达式)

示例:获取输入,直到输入的值为正数为止

 
  

while和do-while的区别

  1. while 循环
    • 在 循环中,循环条件会在每次循环开始之前被检查。如果条件为真,循环体会执行,然后再次检查条件。如果条件为假,循环终止。
    • 这意味着,如果条件一开始就为假,循环体可能一次都不会执行。
  2. do-while 循环
    • 在 循环中,循环体会先执行一次,然后再检查循环条件。只要条件为真,循环体会继续执行,否则循环终止。
    • 这意味着, 循环至少会执行一次循环体,即使条件一开始就为假。

嵌套循环

示例:水仙花数字

 
  

单行格式if

 
  

多行格式if

 
  

语法

 
  

结构体创建变量

 
  

结构体数组

 
  

结构体指针

 
  

结构体嵌套

结构体中成员是另一个结构体

主函数为main(),但可以创作其他函数进行运算,只需在主函数中调用即可,以下以阶乘为例

 
  

STL(Standard Template Library)是 C++ 标准库的一部分,它提供了一组通用的模板类和函数,用于实现常见的数据结构和算法。STL 的设计旨在提供一种高效、灵活和可重用的方法来处理数据结构和算法问题。总的来说,STL库装了许多算法和组件,包含多种函数,可用于开发各类应用程序

基本用法

格式:

 
  
 
  

cmp用法

在sort比较函数中传入排序函数,>为降序,<为升序

 
  

map是一个关联容器,它提供了一种将键与值关联起来的方式,map中的每个元素都是一个键(key-value pair),其中键(key)是唯一的,值(value)则可以不唯一。它基于红黑树(Red-Black Tree)实现。

注意:map不允许容器中有重复的key值,multimap允许容器中有重复的key

格式:

 
  
 
  

1)构造

map<T1,T2> mp; map对象默认构造形式 map(const map &qmp); 拷贝构造函数

2)赋值

map& operator=(const map &mp); 重载等号操作符

3)大小和交换

size();

返回容器中元素数目 empty(); 判断容器是否为空 swap(st); 交换两个集合容器

4)插入和删除

insert(elem); 在容器中插入元素 clear(); 清除所有元素 erase(pos); 删除pos迭代器所指的元素,返回下一个元素的选代器 erase(beg,end); 删除区间[beg,end)的所有元素,返回下一个元素的迭代器 erase(elem); 删除容器中值为elem的元素。

5)查找和统计

find(key); 查找是否存在key,若存在返回该键的元素的迭代器,若不存在,返回set.end() count(key); 统计key的元素的个数

相当于是一个小箱子,每次向箱子顶部塞入数据,遵循先进后出(Last In, First Out,LIFO)的原则。栈可以被看作是一种容器,其中元素按照后进先出的顺序进行插入和删除。

格式:

 
  

栈的成员函数

.empty() 判断栈是否为空,空则返回true .push(…) 在栈顶增加元素 .pop() 在栈顶移除元素 .top() 返回栈顶元素 .size() 返回栈的元素数量

代码示例:

 
  

使用的时候可以看作数组,但他相对于数组来说可以动态扩展,增加长度

1)构造

 
  
 
  

2)遍历

v.begin() 返回迭代器,这个迭代器指向容器中第一个数据 v.end() 返回迭代器,这个迭代器指向容器元素的最后元素的下一个位置 vector<int>::iterator  拿到这种容器的迭代器类型

第一种遍历方式

 
  

第二种遍历方式

 
  

3)赋值

vector& operator=(const vector &v);  重载赋值运算符 assign(v.begin(),v.end()); 将[v.begin(),v.end())区间中的元素赋值给本身 assign(n,elem); 将n个elem赋值给本身
 
  

4)容量和大小

empty(); 判断容器是否为空 capacity(); 容器容量 size(); 容器中元素个数 resize(int num); 重新指定长度num,变短删末尾元素,变长以默认值填充新位置 resize(int num,elem); 重新指定长度num,变短删末尾元素,变长以elem填充新位置

5)插入和删除

push_back(elem); 尾部插入元素elem pop_back(); 删除最后一个元素 insert(const_iterator pos,elem); 指向的位置pos处插入一个元素elem insert(const_iterator pos,int count,elem); 指向的位置pos处count元素elem erase(const_iterator pos); 指向的位置pos处删除元素 erase(const_iterator start,const_iterator end);

删除start到end之间的元素

clear(); 清空所有元素

6)数据存取

at(int id); 返回id处数据

operator[];

返回[]处数据 front(); 返回第一个数据 back(); 返回最后一个数据

7)互换容器

swap(vec); 将vec与本身元素互换
 
  

8)预留空间

reserve(int len); 预留len个元素长度

当数据量较大时可以一开始就利用reserve预留空间

string内部封装了许多成员方法,如find,copy,delete,insert,replace等

头文件:#include<string>

1)构造

string(); 构造空 字符串 string(const char* s); 拷贝s所指向的字符串序列,使字符串s初始化 string(const char* s, size_t n); 拷贝s所指向的字符串序列的第n个到结尾的字符 string(size_t n, char c); 将字符c复制n次 string(const string& str); 拷贝构造函数。使用一个string对象初始化另一个对象 string(const string& str, size_t pos, size_t n = npos); 拷贝s中从pos位置起的n个字符,若npos>字符串长度,就拷贝到字符串结尾结束
 
  

2)赋值

string& operator=(const char* s); char*类型字符串赋值给当前的字符串 string& operator=(const string &s); 把字符串s赋给当前的字符串 string& operator=(char c); 字符赋值给当前的字符串 string& assign(const char *s); 把字符串s赋给当前的字符串 string& assign(const char *s, int n); 把字符串s的前n个字符赋给当前的字符串 string& assign(const string &s); 把字符串s赋给当前字符串 string& assign(int n, char c); 用n个字符c赋给当前字符串

3)字符串插入、拼接和删除

插入:

void push_back (char c); 向字符串末尾追加一个字符

string& insert(size_t pos, const string& str);

插入字符串拷贝 string& insert (size_t pos, const char* s); 插入c形式的字符串 string& insert (size_t pos, const char* s, size_t n); 将字符串s的前n个字符插到pos位置
 
  

拼接:

string& operator+=(const char* str); 重载+=操作符 string& operator+=(const char c); 重载+=操作符 string& operator+=(const string& str); 重载+=操作符 string& append(const char *s); 把字符串s连接到当前字符串结尾 string& append(const char *s, int n); 把字符串s的前n个字符连接到当前字符串结尾 string& append(const string &s); 同operator+"(const string& str) string& append(const string &s,int pos,int n);

字符用s中从pos开始的n个字符连接到字符串结尾

删除:

string& erase(int pos, int n = npos); 删除从pos开始的第n个字符
 
  

4)查找和替换

int find(const string& str, int pos = 0) const; 查找str最后一次位置,从pos开始查找 int find(const char*s, int pos =0)const; 查线s第一次出现位置,从pos开始查找 int find(const char* s, int pos, int n) const; 从pos位置查找s的前n个字符第一次位置 int find(const char c, int pos=0) const; 查找字符c第一次出现位置 int rfind(const string& str, int pos = npos) const; 查找str最后一次位置,从pos开始查找 int rfind(const char* s, int pos = npos) const; 查找s最后一次出现位置.从pos开始查找 int rfind(const char* s, int pos, int n) const; 从pos查找s的前n个字符最后一次位置 int rfind(const char c, int pos = 0) const; 查找李符c最后一次出现位置 string& replace(int pos, int n, const string& str); 替换从pos开始n个字符为字符串str string& replace(int pos, int n, const char* s); 替换从pos开始的n个字符为字符串s

注意:

find是从左往右查找,rfind是从右往左查找

find找到字符串后返回查找的第一个字符位置,找不到就返回-1

replace在替换时,要指定从哪个位置起,替换多少个字符,替换成什么

5)字符串的比较

int compare(const string &s) const; 与字符串s比较 int compare(const char *s) const: 与字符串s比较

注意:若=则返回0,>返回1,<返回-1

 
  

6)字符串存取

char& operator[](int n); 通过[]方式取字符 char& at(int n); 通过at方式取字符
 
  

7)子串

string substr(int pos=0,int n = npos) const; 返回由pos开始的n个字符组成的字符串
 
  

基本概念:以有序的方式存储一组唯一的元素。具体来说,使用红黑树(Red-Black Tree)实现,这使得元素在插入时就会按照特定的顺序进行排序,并且保证了查找、插入和删除操作的高效性能。

注意:set不允许容器出现重复元素,multiset允许容器出现重复元素

头文件:#include<set>

遍历:

 
  

1)构造和赋值

set<T> st; 默认构造函数 set(sonst set &st); 拷贝构造函数 set& operator=(const set &st); 重载等号操作符
 
  

2)大小和交换

size();

返回容器中元素数目 empty(); 判断容器是否为空 swap(st); 交换两个集合容器
 
  

3)插入和删除

insert(elem); 在容器中插入元素 clear(); 清除所有元素 erase(pos); 删除pos迭代器所指的元素,返回下一个元素的选代器 erase(beg,end); 删除区间[beg,end)的所有元素,返回下一个元素的迭代器 erase(elem); 删除容器中值为elem的元素。
 
  

4)查找和统计

find(key); 查找是否存在key,若存在返回该键的元素的迭代器,若不存在,返回set.end() count(key); 统计key的元素的个数

先进先出的数据结果,有两个出口,只有队头和队尾能被外界访问,因此不存在遍历的行为

1)构造函数

queue<T> que; queue对象默认构造形式 queue(const queue &que); 拷贝构造函数

2)赋值

queue& operator=(const queue &que); 重载等号操作符

3)数据存取

push(elem); 往队尾 添加元素 pop(); 从队头移除一个元素 back(); 返回最后一个元素 front(); 返回第一个元素

4)大小

empty(); 判断堆栈是否为空 size(); 返回栈的大小

C语言风格:

 
  

C++引入的string类类型(函数及其目的)

Strcpy(s1,s2)

复制字符串s2到字符串s1

Strcat(s1,s2)

连接字符串s2到s1的末尾

Strlen(s1) 返回字符串s1的长度 Strcmp(s1,s2)

若s1=s2,返回0

若s1<s2,返回值小于0

若s1>s2,返回值大于0

Strchr(s1,s2) 返回一个指针,指向s1中字符ch第一次出现的位置 Strstr(s1,s2) 返回一个指针,指向s1中s2第一次出现的位置

1)对字符数组得输入方法

1.1cin使用空白字符作为一次输入的结尾,并忽略该空字
 
  

该情况下只能输入一个单词,若输入了多个单词,只会取第一个单词,其余单词被忽略掉

1.2使用getline()/get()函数完成面向行的输入

区别:主要区别在于它们处理输入流的方式: 用于读取整行并丢弃定界符,而 则用于逐字符读取,并保留定界符在输入流中。

#cin.getline()

 
  

nums:代表从该队列中获取nums-1个字符到line中(最后一个字符为0)若超出nums-1,后面的都无法取到。

delim:指定分界符,表示遇到分界符后当前字符串的输入将停止,其后的会保留在输入队列中作为下一个字符串的开始。

 
  

#cin.get()

 
  

get会在输入队列中保留最后的换行符,若不做处理可能出现问题,以下方式可以避免:

 
  
1.3数字与字符串混合输入
 
  

2)对string对象的输入方法

 
  

1)常用函数

2)读写string

 
  

若要保留输入时的空格,可以使用getline

 
  

3)cctype头文件

4)用for循环完成cctype各项

 
  

原理:比较前后两个数字的大小,大的放在后面,依次遍历所有数字

 
  

原理:

  1. 遍历数组,找到最小(或最大)的元素。
  2. 将找到的最小(或最大)元素与数组的第一个元素交换位置。
  3. 排除第一个元素,对剩余的元素进行相同的操作,即在剩余的未排序部分中找到最小(或最大)的元素,并与该部分的第一个元素交换位置。
  4. 重复以上步骤,直到整个数组排序完成。

缺点:平均时间复杂度为O(n^2),空间复杂度为O(1),性能通常比较差。

 
  

原理:

  1. 将数组视为两部分,一部分是已排序的部分,一部分是未排序的部分。
  2. 从未排序部分取出第一个元素,在已排序部分中从后往前逐个比较,找到合适的位置插入该元素,使得插入后的部分仍然保持有序。
  3. 重复上述过程,直到未排序部分为空,整个数组就排好序了。

优点:适合小型数据集或部分有序的数据。

 
  

到此这篇c加加编程入门(C加加编程入门教学)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • git clone指定目录(git clone filename too long)2025-08-02 23:09:09
  • x mouse 设置csol(xmouse自定义按键)2025-08-02 23:09:09
  • c++单向链表双向链表(单向链表c语言)2025-08-02 23:09:09
  • excel合并数组(excel中怎么组合数组)2025-08-02 23:09:09
  • cysb50yc17q-100出故障码e0(cysb50yc10a-100报警e0)2025-08-02 23:09:09
  • gitclone到本地(git clone 后pull到本地仓库)2025-08-02 23:09:09
  • pillow和cushion的区别(pillow和pil区别)2025-08-02 23:09:09
  • to 翻译成中文(welcome to 翻译成中文)2025-08-02 23:09:09
  • xdp是什么意思缩写(xdc是什么意思?)2025-08-02 23:09:09
  • cnn什么意思骂人不带脏字(cnn是什么意思英语)2025-08-02 23:09:09
  • 全屏图片