C++ 教程 - 02 复合数据类型

数组

  • 相同类型的数据的集合{ },通过索引访问元素;
  • 在内存中连续存储,属于顺序表;
  • 插入、删除时间复杂度 O ( n ) O(n) O(n),访问复杂度 O ( 1 ) O(1) O(1)
  • 定义数组,首先确定内部的数据类型,并指定长度(常量),初始化时只能使用{ }来初始化;
// 定义
int arr[30] = {
   1, 2, 3}; // 后面的值默认为0,初始值个数不能超过长度

// 不指定长度时,需要初始化
double score[] = {
   79.5, 80.5, 90}; 

// 访问数组,注意索引越界问题
for(int i=0; i < sizeof(arr) / sizeof(arr[0]) ; i++){
   
	cout << "arr[" << i << "]:" << arr[i] << endl;
}

// 仅仅获取元素
for(int e:arr){
   
	cout << e << endl;
}

 

  • 数组内部嵌套数组,即二维数组
// 定义二维数组
int arr[2][3] = {
   
		{
   1,2,3},
		{
   4,5,5}
	};

// 遍历
int rowCount = sizeof(arr) / sizeof(arr[0]);
int colCount = sizeof(arr[0]) / sizeof(arr[0][0]);
for(int i=0; i<rowCount; i++){
   
	for(int j=0; j<colCount; j++){
   
		cout << arr[i][j] << endl;
	}
}

// 元素遍历
for(auto& row:arr){
    // 复合数据类型需要 &引用
	for(auto e:row){
    // auto 自动类型
		cout <<e << endl;	
	}
}

 

  • 数组实现 选择排序

int main() {
   
	
	int arr[] = {
   4, 3, 2, 1, 5};
	// 选择排序O(n^2)
	// 每次选择最大值或者最小值,放在最后一位
	// n个数 做n-1次选择
	int arrLen = sizeof(arr) / sizeof(arr[0]);
	int n = arrLen - 1;
	int temp;
	while (n >= 1) {
    // 控制选择次数
		int max_idx = 0; // 
		for (int i = 1; i <= n; i++) {
   
			if (arr[i] > arr[max_idx]) {
   
				max_idx = i;
			}
		}
		// 交换
		if (max_idx != n) {
   
			// 交换
			temp = arr[n];
			arr[n] = arr[max_idx];
			arr[max_idx] = temp;
		}
		n--;
	}

	for (int i = 0; i < arrLen; i++) {
   
		cout << arr[i] << endl;
	}
  • 数组实现 冒泡排序

int main() {
   
	
	int arr[] = {
   4, 3, 2, 1, 5};
	// 冒泡排序 O(n^2)
	// 每次将较大值向后一位冒泡
	// n个数 做n-1轮冒泡
	int arrLen = sizeof(arr) / sizeof(arr[0]);
	int temp;
	for (int i = 0; i < arrLen - 1; i++) {
    // 控制冒泡的轮数
		
		// 控制冒泡
		for (int j = 0; j < arrLen - 1 - i; j++) {
   
		
			if (arr[j] > arr[j + 1]) {
   
				temp = arr[j + 1];
				arr[j + 1] = arr[j];
				arr[j] = temp;
			}
		}
	}

	for (int i = 0; i < arrLen; i++) {
   
		cout << arr[i] << endl;
	}

	// system("dir");
	system("pause");
	return 0;
}

 

vector

  • 数组的长度固定,且越界操作可能带来未知的风险,故对数组扩展,得到vector,array;
  • vector容器,也是相同类型的数据的集合,长度可变,但性能降低;
  • array容器,也是相同类型的数据的集合,长度固定,但性能降低;
#include <vector>
#include <array>
using namespace std;  // 必须包含头文件,并使用std 


int main() {
   
	// 容器是对数组的扩展,不定长用vector, 定长用array (也是扩展的数组)
	// 拷贝初始化
	vector<int> cont1 = {
   1, 2, 3}; 
	vector<float> cont2{
    34.5, 46.7 }; //  赋值号可省略

	// 直接初始化
	vector<double> cont3(5); // 指定长度为5  可以继续添加数据,扩展长度
	vector<string> cont4(3, "jack"); // 长度为3,且默认值均为"jack"

	// 容器  通过索引访问,修改
	for (int i = 0; i < cont1.size(); i++) {
   
		cout << cont1[i] << "\t";
	}
	// 添加
	cont1.push_back(100); // 尾部添加
	//cont1.pop_back(); // 尾部删除
	for (int e : cont1) {
   
		cout << e << " ";
	}

	// 基于数组扩展的array , 固定长度
	array<string, 5> userList = {
    "jack", "tom", "lucy" }; // 赋值也可省略
	// array<string, 5> userList;  
	// userList = { "jack", "tom", "lucy" };   // 先声明,再赋值 userList.size() 长度
	for (string e : userList) {
   
		cout << e << " ";
	}

	return 0;
}

字符串

  • string类型,也是一个容器,内容可变,通过索引访问每个字符;
  • size()方法获取长度,size() - 1是最后一个索引;同数组,也不能越界访问/赋值
  • 支持两种for循环
#include <string>
using namespace std;


int main() {
   
	// c++ 中的string是可变的容器,而python的str是不可变的容器
	string name; //初始化为空
	string sex = "male"; //拷贝初始化
	string addr("wuhan province"); // 直接初始化

	// 普通的for
	for (int i = 0; i < addr.size(); i++) {
   
	
		cout << addr[i] << " "; // 索引访问每个字符
	}

	// 元素遍历的for
	for (char e : addr) {
   
		cout << e << " ";
	}

	return 0;
}
  • 字符串的拼接
    • 字符串变量 + 字符串变量;
    • 字符串变量 + 字符串字面量;
    • 字符串字面量 + 字符串字面量 (X); 不同于python
  • 字符串的比较
    • ==、> >= < <= 逐字符比较;

结构体

pass

枚举

pass

指针

pass

引用

pass

综合案例

pass

相关推荐

  1. C++ 教程 - 02 复合数据类型

    2023-12-10 10:00:04       66 阅读
  2. C++复合数据类型:结构体|枚举

    2023-12-10 10:00:04       53 阅读
  3. 01_02_mysql04_数据类型

    2023-12-10 10:00:04       55 阅读
  4. C 语言教程数据类型和格式说明符

    2023-12-10 10:00:04       60 阅读
  5. Rust---复合数据类型之字符串(1)

    2023-12-10 10:00:04       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-10 10:00:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-10 10:00:04       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-10 10:00:04       87 阅读
  4. Python语言-面向对象

    2023-12-10 10:00:04       96 阅读

热门阅读

  1. 【力扣100】5.盛水最多的容器

    2023-12-10 10:00:04       67 阅读
  2. lua 脚本按位与运算

    2023-12-10 10:00:04       60 阅读
  3. Go语言 接口型函数

    2023-12-10 10:00:04       63 阅读
  4. 如何在Go中编写包

    2023-12-10 10:00:04       68 阅读
  5. go与ioc

    2023-12-10 10:00:04       53 阅读
  6. 深入学习之anaconda、pytorch、cuda安装

    2023-12-10 10:00:04       63 阅读
  7. 开启 winrm 功能

    2023-12-10 10:00:04       54 阅读
  8. VSCode 创建工作区,多文件夹终端切换

    2023-12-10 10:00:04       56 阅读