C++基础第四弹
- 11.C++日期&时间
- 12.C++基本的输入输出
- 12.1I/O库头文件
- 12.2标准输出流(cout)
- 12.3标准输入流(cin)
- 12.4标准错误流(cerr)
- 12.5标准日志流(clog)
- 13.C++结构体
- 13.1访问结构体成员
- 13.2结构体作为函数参数
- 13.3指向结构的指针
- 13.4typedef关键字
- 14.C++Vector容器
- 14.1基本特性
- 14.2使用场景
- 14.3创建Vector
- 14.4添加元素
11.C++日期&时间
-
C++ 继承了 C 语言用于日期和时间操作的结构和函数
-
需要在 C++ 程序中引用 头文件
struct tm {int tm_sec; // 秒,正常范围从 0 到 59,但允许至 61int tm_min; // 分,范围从 0 到 59int tm_hour; // 小时,范围从 0 到 23int tm_mday; // 一月中的第几天,范围从 1 到 31int tm_mon; // 月,范围从 0 到 11int tm_year; // 自 1900 年起的年数int tm_wday; // 一周中的第几天,范围从 0 到 6,从星期日算起int tm_yday; // 一年中的第几天,范围从 0 到 365,从 1 月 1 日算起int tm_isdst; // 夏令时 };
序号 | 函数 & 描述 |
---|---|
1 | time_t time(time_t *time); 该函数返回系统的当前日历时间,自 1970 年 1 月 1 日以来经过的秒数。如果系统没有时间,则返回 -1。 |
2 | **char *ctime(const time_t *time);**该返回一个表示当地时间的字符串指针,字符串形式 day month year hours:minutes:seconds year\n\0。 |
3 | struct tm *localtime(const time_t *time); 该函数返回一个指向表示本地时间的 tm 结构的指针。 |
4 | clock_t clock(void); 该函数返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。如果时间不可用,则返回 -1。 |
5 | char * asctime ( const struct tm * time ); 该函数返回一个指向字符串的指针,字符串包含了 time 所指向结构中存储的信息,返回形式为:day month date hours:minutes:seconds year\n\0。 |
6 | **struct tm *gmtime(const time_t *time);**该函数返回一个指向 time 的指针,time 为 tm 结构,用协调世界时(UTC)也被称为格林尼治标准时间(GMT)表示。 |
7 | time_t mktime(struct tm *time); 该函数返回日历时间,相当于 time 所指向结构中存储的时间。 |
8 | double difftime ( time_t time2, time_t time1 ); 该函数返回 time1 和 time2 之间相差的秒数。 |
9 | **size_t strftime();**该函数可用于格式化日期和时间为指定的格式。 |
//
// Created by 16690 on 2024/4/19.
//#include <iostream>
#include <ctime>
using namespace std;int main(void){//基于当前系统的当前日期/时间time_t now = time(0);//把now转为字符串形式char * dt = ctime(&now);cout << "本地日期和时间:" << dt << endl;//把now转为 tm 结构tm *gmtm = gmtime(&now);dt = asctime(gmtm);cout << "UTC 日期和时间:" << dt << endl;return 0;
}
-
使用结构tm格式化时间
// // Created by 16690 on 2024/4/19. //#include <iostream> #include <ctime>using namespace std;int main(void) {//基于当前系统的当前日期/时间time_t now = time(0);//把now转为字符串形式char *dt = ctime(&now);cout << "本地日期和时间:" << dt << endl;//把now转为 tm 结构tm *gmtm = gmtime(&now);dt = asctime(gmtm);cout << "UTC 日期和时间:" << dt << endl;cout << "1970 年以来的秒数:" << now << endl;tm *ltm = localtime(&now);cout << "年:" << 1900 + ltm->tm_year << endl;cout << "月:" << 1+ltm->tm_mon << endl;cout << "日:" << ltm->tm_mday << endl;cout << "时:" << ltm->tm_hour << endl;cout << "分:" << ltm->tm_min << endl;cout << "秒:" << ltm->tm_sec << endl;//格式化时间,存放时间字符串char tmp[64];strftime(tmp, sizeof(tmp), "%Y-%m-%d %H:%M:%S", ltm);cout << "当前时间:" << tmp << endl;return 0; }
12.C++基本的输入输出
12.1I/O库头文件
头文件 | 函数和描述 |
---|---|
该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。 | |
该文件通过所谓的参数化的流操纵器(比如 setw 和 setprecision),来声明对执行标准化 I/O 有用的服务。 | |
该文件为用户控制的文件处理声明服务。 |
12.2标准输出流(cout)
#include <iostream>using namespace std;int main( )
{char str[] = "Hello C++";cout << "Value of str is : " << str << endl;
}
12.3标准输入流(cin)
#include <iostream>using namespace std;int main( )
{char name[50];cout << "请输入您的名称: ";cin >> name;cout << "您的名称是: " << name << endl;}
12.4标准错误流(cerr)
#include <iostream>using namespace std;int main( )
{char str[] = "Unable to read....";cerr << "Error message : " << str << endl;
}
12.5标准日志流(clog)
#include <iostream>using namespace std;int main( )
{char str[] = "Unable to read....";clog << "Error message : " << str << endl;
}
13.C++结构体
-
C/C++数组允许定义可存储相同类型数据项的变量
-
C++结构体允许自定义可存储的不同类型数据项的变量
-
语法:
struct 结构体类型名{数据类型 变量名;数据类型 变量名;数据类型 变量名; } 结构体名;
13.1访问结构体成员
- 使用成员访问运算符
.
来访问结构体成员
//
// Created by 16690 on 2024/4/19.
//
#include <iostream>
#include <cstring>using namespace std;struct Books {char title[50];char author[50];char subject[100];int book_id;
} books;int main(void) {//定义结构体类型Books的变量books1Books books1;//定义结构体类型Books的变量books2Books books2;//books1 详述strcpy(books1.title,"C++编程");strcpy(books1.author, "C++");strcpy(books1.subject,"编程语言");books1.book_id=12345;//books2 详述strcpy(books2.title,"Java编程");strcpy(books2.author, "Java");strcpy(books2.subject,"编程语言");books2.book_id=12346;//输出books1信息cout << "书1ID : " << books1.book_id << endl;cout << "书1标题 : " << books1.title << endl;cout << "书1作者 : " << books1.author << endl;cout << "书1类目 : " << books1.subject << endl;//输出books2信息cout << "书2ID : " << books2.book_id << endl;cout << "书2标题 : " << books2.title << endl;cout << "书2作者 : " << books2.author << endl;cout << "书2类目 : " << books2.subject << endl;return 0;
}
13.2结构体作为函数参数
//
// Created by 16690 on 2024/4/19.
//
#include <iostream>
#include <cstring>using namespace std;struct Books {char title[50];char author[50];char subject[100];int book_id;
} books;void printInfo(struct Books book, int num);int main(void) {//定义结构体类型Books的变量books1Books books1;//定义结构体类型Books的变量books2Books books2;//books1 详述strcpy(books1.title, "C++编程");strcpy(books1.author, "C++");strcpy(books1.subject, "编程语言");books1.book_id = 12345;//books2 详述strcpy(books2.title, "Java编程");strcpy(books2.author, "Java");strcpy(books2.subject, "编程语言");books2.book_id = 12346;cout << "-------------------------" << endl;//使用 . 运算符//输出books1信息printInfo(books1, 1);//输出books2信息printInfo(books2, 2);return 0;
}void printInfo(struct Books books, int id) {cout << "书-" << id << "-ID : " << books.book_id << endl;cout << "书-" << id << "-标题 : " << books.title << endl;cout << "书-" << id << "-作者 : " << books.author << endl;cout << "书-" << id << "-类目 : " << books.subject << endl;
}
13.3指向结构的指针
-
可以定义指向结构的指针,方式与定义指向其他类型
struct 结构体类型名 * 结构体指针名;结构体指针名 = &结构体名;结构体指针名 -> 结构体属性;
-
访问结构的成员时使用点运算符,而通过指针访问结构的成员时,则使用箭头运算符。
-
用结构体定义的是一个实体,那么这个实体要引用结构体成员,就用
.
操作符, -
如果用结构体定义的是一个结构体指针,那么要引用结构体成员就用
->
操作符// // Created by 16690 on 2024/4/19. // #include <iostream> #include <cstring> using namespace std;struct Books {char title[50];char author[50];char subject[100];int book_id; };void printInfo(struct Books *books, int id); int main(void){//定义结构体类型Books的变量books1Books books1;//定义结构体类型Books的变量books2Books books2;//books1 详述strcpy(books1.title, "C++编程");strcpy(books1.author, "C++");strcpy(books1.subject, "编程语言");books1.book_id = 12345;//books2 详述strcpy(books2.title, "Java编程");strcpy(books2.author, "Java");strcpy(books2.subject, "编程语言");books2.book_id = 12346;//使用 -> 运算符printInfo(&books1,1);printInfo(&books2,2);return 0; }void printInfo(struct Books *books, int id) {cout << "书-" << id << "-ID : " << books->book_id << endl;cout << "书-" << id << "-标题 : " << books->title << endl;cout << "书-" << id << "-作者 : " << books->author << endl;cout << "书-" << id << "-类目 : " << books->subject << endl; }
13.4typedef关键字
-
给创建的类型取一个别名,然后使用typedef 来定义对应的结构体类型
struct Books {char title[50];char author[50];char subject[100];int book_id; } books;Books books1,books2;
-
typedef来定义非结构类型
typedef long int *pint32; pint32 x, y, z;
14.C++Vector容器
- C++ 中的 vector 是一种序列容器,允许在运行时动态地插入和删除元素
- vector 是基于数组的数据结构,但它可以自动管理内存,这意味着不需要手动分配和释放内存
14.1基本特性
- 动态大小:
vector
的大小可以根据需要自动增长和缩小。 - 连续存储:
vector
中的元素在内存中是连续存储的,这使得访问元素非常快速。 - 可迭代:
vector
可以被迭代,你可以使用循环(如for
循环)来访问它的元素。 - 元素类型:
vector
可以存储任何类型的元素,包括内置类型、对象、指针等。
14.2使用场景
- 当需要一个可以动态增长和缩小的数组时。
- 当需要频繁地在序列的末尾添加或移除元素时。
- 当需要一个可以高效随机访问元素的容器时。
14.3创建Vector
-
包含头文件
// // Created by 16690 on 2024/4/19. // #include <iostream> #include <vector>using namespace std; int main(void){//创建vector容器//如果没有使用命名空间 需要使用std::vector<int>vector<int> myVector1;//创建vector容器并初始化// 创建一个包含 5 个整数的 vector,每个值都为默认值(0)vector<int> myVector2(5);// 创建一个包含 5 个整数的 vector,每个值都为 10vector<int> myVector4(5,10);// 初始化一个包含元素的 vectorvector<int> myVector5={1,2,3,4,5};return 0; }
14.4添加元素
//
// Created by 16690 on 2024/4/19.
//
#include <iostream>
#include <vector>using namespace std;int main(void) {//创建vector容器//如果没有使用命名空间 需要使用std::vector<int>vector<int> myVector1;//创建vector容器并初始化// 创建一个包含 5 个整数的 vector,每个值都为默认值(0)vector<int> myVector2(5);// 创建一个包含 5 个整数的 vector,每个值都为 10vector<int> myVector4(5, 10);// 初始化一个包含元素的 vectorvector<int> myVector5 = {1, 2, 3, 4, 5};//添加元素//使用 push_back 方法向 vector 中添加元素,添加到末尾myVector5.push_back(6);//访问元素//使用下标操作符 [] 或 at() 方法访问 vector 中的元素:int x = myVector5[0];int y = myVector5.at(0);cout << "myVector5[0]=" << x << endl;cout << "myVector5.at(0)=" << y << endl;//获取大小//使用 size() 方法获取 vector 中元素的数量int size = myVector5.size();//迭代访问1for (auto it = myVector5.begin(); it != myVector5.end(); it++) {cout << *it << endl;}//迭代访问2cout << "-------------------" << endl;for (const auto &item: myVector5) {cout << item << endl;}//迭代访问3cout << "-------------------" << endl;for (int element: myVector5) {cout << element << "\t" << endl;}//删除元素myVector5.erase(myVector5.begin() + 2);//清空元素myVector5.clear();cout << "myVector5.size=" << myVector5.size() << endl;return 0;
}