C++基础(一)
1、字面值常量 字面值常量就是形如“42”,“1”等显而易见的值,每一个字面值常量都对应一种数据类型,比如字符型,整形,浮点型等等。 对于整形字面值,我们可以写作十进制数、十六进制数或者八进制数,定义方式如下:
int a = 10;
int a = 010;
int a =0x10;
对于字面值的类型,还可以通过添加前缀或者后缀来改变其默认的类型。 2、C++中的复合类型 复合类型是指基于其他类型定义的类型,这里主要介绍----引用和指针 引用为对象起了另外一个名字,引用类型引用另外一种类型。
int i = 0;
int& ip = i;
创建引用时,必须初始化引用。引用的不同在于并非将数据复制一份,而是与原数据绑定,在引用上进行操作就等于在原数据上操作。 指针可以存储原数据的地址,同样的,对指针进行解引用操作,同样也等于对原始数据进行操作
int i = 0;
int& ip = i;
int* p = &i;
ip = 2;
cout << i << endl;
*p = 20;
cout << i;
通过引用将 i变为2,在通过指针解引用将i变为20。 指针可以作为布尔值进行判定,任何非空的指针都会被作为Ture。 特殊的指针----void* :void* 是一种特殊的指针,同样存放地址但是·我们不清楚其地址中存放的数据类型。 指向指针的指针,指针可以分为多级通过*的数量来区分指针级别。 3、auto类型说明符 auto类型说明符允许我们不定义变量类型,由系统自行推断数据的类型。
auto i = 0;
int& ip = i;
auto* p = &i;
ip = 2;
cout <<i << endl;
*p = 20;
cout << i;
修改刚才的程序。 decltype类型指示符 decltype指示符的的作用是选择并返回操作数的数据类型。在此过程中,编译器分析表达式并得到它的类型,不计算表达式的值 4、命名空间的using声明 命名空间包含了其中的成员,因此系统使用时才能识别其作用,标准库的名字空间为std。其中就包含cin和cout,如果不写就会报错。
using namespace std;
std::cin >> a;
两种方式,第一种只要写出后面就都不用再写了,第二种只针对某一函数。 5、标准库类型string 对于字符串或者数组,不使用string类的话就必须初始化其长度,这是明显不合适的。使用string可以输入自定义长度的字符串,其中也可以包含数字。但是对于一个string类对象,中间输入不能包含空格,系统读取到空格就会停止读入。若定义两个或者以上,那么空格刚好可以作为不同类对象的分界。
string s1, s2;
cin >> s1 >> s2;
cout << s1 << endl << s2;
使用for循环来查看一个字符串中的标点个数。其中的ispunct函数用来统计string对象中标点符号的个数。
string s("hello world!");
decltype(s.size()) punct_cnt = 0;
for (auto c : s)
{
if (ispunct(c))
{
++punct_cnt;
}
}
cout << punct_cnt << " punctuation characters in" << s << endl;
使用toupper函数来将string类的字符全部变为大写
for (auto& c : s)
{
c = toupper(c);
}
cout << s << endl;
访问string类中的某一位置元素,与数组类似,采用[下标]方式
s[0]
6、标准库类型 vector 标准库类型vector表示对象的集合,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引来用于访问对象。因为vector中容纳着其他对象,所以它也被称为容器,是一个类模板(C++中既有类模板也有函数模板)。 模板本身不是类或函数,相反可以将模板看作是编译器生成类或者函数的一份说明。编译器根据模板创建类或者函数地过程称为实例化 。
vector<int> ivec;
vector<Sales_item> Sales_vec;
vector<vector<string>> file;
vector初始化的不同方式,常用的包含两种,一种是{}方式,一种时()方式,两种方式产生的结果是完全不同的;
vector<int> v1(10);
vector<int> v2{10};
vector<int> v3(10, 1);
vector<int> v4{10, 1};
向vector对象中添加元素,使用push_back可以将一个元素作为vector对象的尾元素压入其中:
vector<int> aj;
for (int a = 0; a < 100; a++)
{
aj.push_back(a);
}
读取vector中的某一位置元素,还是[下标]的方式。 其他的一些vector操作:
empty();
size();
push_back;
aj[n];
a1 == a2 ;
。。。。。
注:访问成员元素时,可以使用下标索引,但是添加元素则不能使用下标方式,但是修改某一位置的元素值,可以使用下标方式
|