C/C++教程

C++语法总结

本文主要是介绍C++语法总结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. 名称空间using namespace std的解释

//区分不同库中相同名称的函数、类、变量等。本质上,命名空间就是定义了一个范围。
//std是一个命名空间,C++标准函数或者对象都是在std中定义的,例如cin和cout,当我们要使用标准库的函数或对象时都需要用std来限定。

2. cin和cout输入输出

<iostream> //该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。

3. 关于C++的头文件

4. C++特有的bool变量

5. const定义常量

6. string类

6.1 字符串函数

//C++中用来操作以null结尾的字符串函数
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, ch);//返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
strstr(s1, s2);//返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

6.2 字符串类

#include <iostream>
#include <string>
 
using namespace std;
 
int main ()
{
   string str1 = "runoob";
   string str2 = "google";
   string str3;
   int  len ;
 
   // 复制 str1 到 str3
   str3 = str1;
   cout << "str3 : " << str3 << endl;
 
   // 连接 str1 和 str2
   str3 = str1 + str2;
   cout << "str1 + str2 : " << str3 << endl;
 
   // 连接后,str3 的总长度
   len = str3.size();
   cout << "str3.size() :  " << len << endl;
 
   return 0;
}

 

7. C++的结构体struct和C语言的结构体区别

//定义结构
struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} book;
//访问结构成员
Books Book1;        // 定义结构体类型 Books 的变量 Book1
strcpy( Book1.title, "C++ 教程");
// 输出 Book1 信息
cout << "第一本书标题 : " << Book1.title <<endl;


//结构作为函数参数
printBook( Book1 );// 输出 Book1 信息
void printBook( struct Books book )
{
   cout << "书标题 : " << book.title <<endl;
}

//指向结构的指针
struct Books *struct_pointer;
struct_pointer = &Book1;//在上述定义的指针变量中存储结构变量的地址。
struct_pointer->title;//指针访问结构的成员

// 该函数以结构指针作为参数
void printBook( struct Books *book )
{
   cout << "书标题  : " << book->title <<endl;
}
// 通过传 Book1 的地址来输出 Book1 信息
printBook( &Book1 );

//typedef 关键字
typedef struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
}Books;
Books Book1, Book2;

//使用 typedef 关键字来定义非结构类型
typedef long int *pint32;
pint32 x, y, z;//x, y 和 z 都是指向长整型 long int 的指针。

 

8. C++的引用&和传值的区别

8.1 lambda表达式

//以lambda表达式为例
//Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。

//Lambda 表达式本质上与函数声明非常类似。
[](int x, int y){ return x < y ; }
//[capture](parameters){body}

// 与JavaScript闭包不同,C++变量传递有传值和传引用的区别。可以通过前面的[]来指定:
[]      // 沒有定义任何变量。使用未定义变量会引发错误。
[x, &y] // x以传值方式传入(默认),y以引用方式传入。
[&]     // 任何被使用到的外部变量都隐式地以引用方式加以引用。
[=]     // 任何被使用到的外部变量都隐式地以传值方式加以引用。
[&, x]  // x显式地以传值方式加以引用。其余变量以引用方式加以引用。
[=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。
//另外有一点需要注意。对于[=]或[&]的形式,lambda 表达式可以直接使用 this 指针。但是,对于[]的形式,如果要使用 this 指针,必须显式传入:
[this]() { this->someFunc(); }();

8.2 引用VS指针

//主要区别:
//不存在空引用。引用必须连接到一块合法的内存。
//一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
//引用必须在创建时被初始化。指针可以在任何时间被初始化。

//引用通常用于函数参数列表和函数返回值。
#include <iostream>
using namespace std;
 
// 函数声明
void swap(int& x, int& y);
 
int main ()
{
   // 局部变量声明
   int a = 100;
   int b = 200;
 
   cout << "交换前,a 的值:" << a << endl;
   cout << "交换前,b 的值:" << b << endl;
 
   /* 调用函数来交换值 */
   swap(a, b);
 
   cout << "交换后,a 的值:" << a << endl;
   cout << "交换后,b 的值:" << b << endl;
 
   return 0;
}
 
// 函数定义
void swap(int& x, int& y)
{
   int temp;
   temp = x; /* 保存地址 x 的值 */
   x = y;    /* 把 y 赋值给 x */
   y = temp; /* 把 x 赋值给 y  */
  
   return;
}

//当函数返回一个引用时,则返回一个指向返回值的隐式指针。这样,函数就可以放在赋值语句的左边
#include <iostream>
 
using namespace std;
 
double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
 
double& setValues(int i) {  
   double& ref = vals[i];    
   return ref;   // 返回第 i 个元素的引用,ref 是一个引用变量,ref 引用 vals[i],最后再返回 shit。
 
 
}
 
// 要调用上面定义函数的主函数
int main ()
{
 
   cout << "改变前的值" << endl;
   for ( int i = 0; i < 5; i++ )
   {
       cout << "vals[" << i << "] = ";
       cout << vals[i] << endl;
   }
 
   setValues(1) = 20.23; // 改变第 2 个元素
   setValues(3) = 70.8;  // 改变第 4 个元素
 
   cout << "改变后的值" << endl;
   for ( int i = 0; i < 5; i++ )
   {
       cout << "vals[" << i << "] = ";
       cout << vals[i] << endl;
   }
   return 0;
}

 

9. STL(标准模板库)之动态数组vector(矢量)的使用

//向量容器(vector)与数组相似,不同的是,向量在扩展大小的时候,会自动处理它自己的存储需求
//常用函数
//push_back( ) 成员函数在向量的末尾插入值,如果有必要会扩展向量的大小。
//size( ) 函数显示向量的大小。
//begin( ) 函数返回一个指向向量开头的迭代器。
//end( ) 函数返回一个指向向量末尾的迭代器。


#include <iostream>
#include <vector>
using namespace std;
 
int main()
{
   // 创建一个向量存储 int
   vector<int> vec; 
   int i;
 
   // 显示 vec 的原始大小
   cout << "vector size = " << vec.size() << endl;
 
   // 推入 5 个值到向量中
   for(i = 0; i < 5; i++){
      vec.push_back(i);
   }
 
   // 显示 vec 扩展后的大小
   cout << "extended vector size = " << vec.size() << endl;
 
   // 访问向量中的 5 个值
   for(i = 0; i < 5; i++){
      cout << "value of vec [" << i << "] = " << vec[i] << endl;
   }
 
   // 使用迭代器 iterator 访问值
   vector<int>::iterator v = vec.begin();
   while( v != vec.end()) {
      cout << "value of v = " << *v << endl;
      v++;
   }
 
   return 0;
}

 

10. STL之集合set的使用

11. STL之映射map使用

12. STL之栈stack的使用

13. STL之队列queue的使用

14. STL之unordered,map和unordered_set的使用

15. 位运算bitset

16. sort函数

17. sort自定义cmp函数

18. cctype头文件里的函数

19. C++11的解释

20. C++11好用的auto声明

21. C++11特性中基于范围的for循环

22. C++特性中to_string

23. C++特性sto,stod

24. 如何在Dev_cpp中使用c++11的函数

25. <math.h><cmath>库函数

double pow(double, double);//x,y,返回x的y次方
double hypot(double, double);//a,b返回直角三角形第三斜边的长度c
double sqrt(double);//该函数返回参数的平方根。
int abs(int);//该函数返回整数的绝对值。
double fabs(double);//该函数返回任意一个浮点数的绝对值。

 

这篇关于C++语法总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!