您的位置:首页 > 编程语言 > C语言/C++

c++语法学习(与java、python语法对比)

2017-07-12 12:04 736 查看
引言

1头文件
1包导入和头文件

2注释

3输入输出流

4语言的基本类型

5大小写敏感

6建立数组
1vector的用法

7ifswitch语句

8数据的初始化

9模板类

10常量

11编写函数

12reference的使用
1符号与

13迭代器
1范型编程风格

引言

由于各个语言的语法不尽相同,所以针对自己的习惯,总结C++的语法:

(PS.看的参考书是 Essential C++)

1、头文件:

//c++头文件:
#include <string>
//java包导入:
import java.awt.*;
#python导入:
import numpy as np


1.1、包导入和头文件

PS. java和python的包导入,只在编译期间中去找需要的部分,所以过分的导入并不会有什么影响。但是c++的头文件会作为源代码全部包含入项目中

2、注释

c++:
//注释
/*注释*/
java:
//注释
/*注释*/
/** 导入javadoc*/
python:
#注释
""" 注释 """


3、输入输出流

//c++:
#include <iostream>
using namespace std;
int main(){
fuck'
cout << "fuck"
<<",fuck";
cin >> fuck;
cout << fuck;
return 0;
}

//java:
import java.util.Scanner;
public class fuck
{
public static void main(string args[]){
System.out.println( "fuck" +" fuck");
Scanner in = new Scanner(System.in);
string fuck = in.nextline();
double a = in.nextDouble();
}

#python:
name = input(“input your name:\n")
print("Hello,", name)


4、语言的基本类型

c++:int 、 char 、float/double 、void(signed、unsigned、long、short) 、bool

java:byte/short/int/long 、float/double 、char 、boolean

python:字符串 、布尔类型 、整数 、浮点数 、数字 、列表 、元组 、字典 、日期

5、大小写敏感

除了VB之外,大多数语言都是大小写敏感的


6、建立数组

//c++:

//一般建立数组的方法:
#include <vector>
...
const int seq_size = 18;
int pell_seq[seq_size];
vector<int> pell_seq_vector(seq_size);
//建立动态数组
vector<int> dynamic_voctor;
dynamic.push_back(5);


6.1、vector的用法

初始化vector:

size = 10
int ele[size] = {1,2,3,4,5,6,7,8,9,10};
vector<int> ele_seq(ele, ele + size);
//因为vector不支持下列语法:
//vector<int> ele_seq[size] = {1,2,3,4}

//指针操作
vector<int> b(array, array + size);
vector<int> *point_vector = &b;
cout << (*point_vector)[9]


http://blog.csdn.net/hancunai0017/article/details/7032383

7、if/switch语句

/****************switch语句******************/
//c++:
int i=4, a=0;
switch(i)
{
case 1 : a++; break;
case 2 : a+=2; break;
case 4 : a+=4; break;
default : a=0;
// 如果i不等于上面所以case中的值,执行default后面的语句,执行完后退出switch
}

//java:
int score = 87;
switch(score / 10)
{
case 9: System.out.println(‘A’);  break;
case 8: System.out.println(‘B’);  break;
case 7: System.out.println(‘C’);  break;
case 6: System.out.println(‘D’);  break;
default: System.out.println(‘E’);
}

#python:
无switch语句

/****************if语句**********************/
//c++:
#include <stdio.h>
int main(){
char c;
printf("input a character:    ");
c=getchar();
if(c<32)
printf("This is a control character\n");
else if(c>='0'&&c<='9')
printf("This is a digit\n");
else if(c>='A'&&c<='Z')
printf("This is a capital letter\n");
else if(c>='a'&&c<='z')
printf(
bf16
"This is a small letter\n");
else
printf("This is an other character\n");
return 0;
}
//java:
//基本与c++相同

#python:
num = 5
if num == 3:            # 判断num的值
print 'boss'
elif num == 2:
print 'user'
elif num == 1:
print 'worker'
elif num < 0:           # 值小于零时输出
print 'error'
else:
print 'roadman'     # 条件均不成立时输出


8、数据的初始化:

//c++:
int num = 0, num2=100; //沿袭c
int num(0);
complex<double> purei(0,7) //对象初始化需要多个初值,比如复数complex

//java:
int num1=0, num2=2; // 没有构造函数语法

#python:
a = 10
b = [888]


9、模板类

//c++:
//  使用模板类:
#include<complex>
#include<vector>
...
complex<double> purei(0,7);
vector<int> vector_array;

//  定义模板类和模板函数:
//  通过下例来说明问题。例如在array.h文件中有模板类array:
//  http://blog.csdn.net/jfkidear/article/details/7888167 //  在array.h文件中定义模板类
template <typename T, int SIZE>
class array
{
T data_[SIZE];
array (const array& other);
const array& operator = (const array& other);
public:
array(){};
T& operator[](int i) {return data_[i];}
const T& get_elem (int i) const {return data_[i];}
void set_elem(int i, const T& value) {data_[i] = value;}
operator T*() {return data_;}

//  定义模板函数
template<class T>
int I;
T min(T x,T y)
{
函数体
}


10、常量

// http://www.cnblogs.com/googny/p/3695344.html const a = 10;
//a = 20 为非法操作


11、编写函数

这里写代码片
//c++:
#include <iostream>

using namespace std;
int fibon_elem(int);

int main() {
//......
return 0;
}

int fibon_elem(int n) {
//......
//返回多个元素的技巧:新添参数,别名或指针

return 0;
}


12、reference的使用:

//c++:冒泡排序
#include <iostream>
#include <vector>

using namespace std;
void display(vector<int>);
void swap(int &val1, int &val2);
void bubble_sort(vector<int> &vec);

void display(vector<int> vec) {
for (int ix = 0; ix < vec.size(); ++ix)
cout << vec[ix] << ' ';
cout << endl;
}

void swap(int &val1, int &val2) {
int temp = val1;
val1 = val2;
val2 = temp;
}

void bubble_sort(vector<int> &vec) {
for (int ix = 0; ix < vec.size(); ++ix)
for (int jx = ix + 1; jx < vec.size(); ++jx)
if (vec[ix] > vec[jx])
swap(vec[ix], vec[jx]);
}

int main() {
int ia[8] = { 8,34,3,13,1,21,5,2 };
vector<int> vec(ia, ia + 8);

cout << "vector before sort: ";
display(vec);

bubble_sort(vec);

cout << "vector after sort: ";
display(vec);
system("pause");
return 0;
}


12.1符号*与&

//c++:
int ival=1024;
int *pi = &ival;//pi是ival的地址,调用ival用(*ival)
int pi = &ival;//报错—> int*类型的值不能用于初始化int类型的实体
int &pi = ival;//pi是ival的别名,使用时直接使用pi


13、迭代器

13.1、范型编程风格:

———-Standard Template Library(STL)主要由两种组件构成,一是容器,包括vector、list、set、map等类。另一种是用以操作这些容器的所谓泛型算法,包括find()、sort()、merge()等。

———-vector和list这两种容器是所谓的顺序性容器。我们在顺序性荣关骑上主要进行所谓的迭代操作。map和set这两种哦容器属于关联容器。

———-泛型算法提供了许多可作用于容器类及数组类型上的操作。这些算法之所以被称为泛型,是因为它们和它们想要操作的元素类型无关。同样,它们也和容器类彼此独立。

———-泛型算法通过function template技术,达到”与操作对象的类型相互独立“的目的。而实现”与容器无关“的诀窍,就是不要直接在容器身上进行操作。而是借由一对iterator(first和last),表示我们要进行迭代的元素范围。

来自别人的比较全面的整理

http://blog.csdn.net/u010098331/article/details/60472800

但是出于水平不同,自己整理也是可以的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++