当前位置: 首页 > news >正文

Part01、02 基础知识与编程环境、C++ 程序设计

CSP-S 初赛备赛知识文档(1)

2.2.1 基础知识与编程环境

1. Linux 系统终端中常用的文件与目录操作命令 【5】

基本文件操作:

  • ls - 列出目录内容
  • cd - 切换目录
  • pwd - 显示当前目录
  • mkdir - 创建目录
  • rm - 删除文件
  • rmdir - 删除目录
  • cp - 复制文件
  • mv - 移动文件

文件查看:

  • cat - 显示文件内容
  • more/less - 分页显示文件
  • head/tail - 显示文件开头/结尾

权限管理:

  • chmod - 修改文件权限
  • chown - 修改文件所有者

2. Linux 系统下常见文本编辑工具的使用 【5】

Vim 编辑器:

  • 模式切换:i(插入), Esc(命令), :(底行)
  • 保存退出::wq
  • 不保存退出::q!
  • 基本移动:h,j,k,l 或方向键

Nano 编辑器:

  • 更简单的文本编辑器
  • Ctrl+O 保存, Ctrl+X 退出

3. g++、gcc 等编译器与相关编译选项 【5】

基本编译命令:

g++ -o program program.cpp  # 编译C++程序
gcc -o program program.c    # 编译C程序

常用编译选项:

  • -O2 - 优化级别2
  • -Wall - 显示所有警告
  • -std=c++11 - 指定C++标准
  • -g - 生成调试信息

4. 在 Linux 系统终端中运行程序,使用 time 命令查看程序用时 【5】

运行程序:

./program        # 运行可执行文件
./program < input.txt  # 重定向输入
./program > output.txt # 重定向输出

计时命令:

time ./program   # 测量程序运行时间

输出格式:

  • real: 实际时间
  • user: 用户态CPU时间
  • sys: 内核态CPU时间

5. 调试工具 GDB 的使用 【5】

启动调试:

gdb ./program    # 启动GDB调试

常用命令:

  • break main - 在main函数设置断点
  • run - 运行程序
  • next - 执行下一行
  • step - 步入函数
  • print var - 打印变量值
  • continue - 继续执行
  • quit - 退出GDB

2.2.2 C++ 程序设计

1. 类(class)

类的概念及简单应用 【6】

类定义:

class MyClass {
private:int privateVar;     // 私有成员
public:int publicVar;      // 公有成员// 构造函数MyClass(int x) : publicVar(x) {}// 析构函数~MyClass() {cout << "析构函数调用" << endl;}// 成员函数void show() {cout << publicVar << endl;}
};

对象创建:

MyClass obj(10);        // 创建对象
obj.show();             // 调用成员函数
成员函数和运算符重载 【6】

成员函数重载:

class Vector {
public:int x, y;// 运算符重载Vector operator+(const Vector& other) {return {x + other.x, y + other.y};}// 友元函数重载friend ostream& operator<<(ostream& os, const Vector& v) {return os << "(" << v.x << ", " << v.y << ")";}
};

使用示例:

Vector v1{1, 2}, v2{3, 4};
Vector v3 = v1 + v2;    // 运算符重载
cout << v3 << endl;      // 输出重载
继承与多态 【6】

继承概念:

// 基类
class Animal {
protected:string name;
public:Animal(string n) : name(n) {}virtual void speak() = 0;  // 纯虚函数virtual ~Animal() {}       // 虚析构函数
};// 派生类
class Dog : public Animal {
public:Dog(string n) : Animal(n) {}void speak() override {cout << name << " says: Woof!" << endl;}
};class Cat : public Animal {
public:Cat(string n极) : Animal(n) {}void speak() override {cout << name << " says: Meow!" << endl;}
};

多态使用:

int main() {Animal* animals[2];animals[0] = new Dog("Buddy");animals[1] = new Cat("Whiskers");for (int i = 0; i < 2; i++) {animals[i]->speak();  // 多态调用delete animals[i];    // 正确调用派生类析构函数}return 0;
}

继承类型:

  • public - 公有继承(基类成员保持原有访问权限)
  • protected - 保护继承(基类公有和保护成员变为保护)
  • private - 私有继承(基类所有成员变为私有)

多态要点:

  • virtual - 声明虚函数,实现运行时多态
  • override - 明确表示重写基类虚函数
  • final - 禁止进一步重写或继承
  • 虚析构函数确保正确释放派生类资源

2. STL 模板

容器(container)和迭代器(iterator) 【5】

常用容器:

  • vector - 动态数组
  • list - 双向链表
  • deque - 双端队列

迭代器使用:

vector<int> v = {1, 2, 3, 4, 5};
for (auto it = v.begin(); it != v.end(); ++it) {cout << *it << " ";
}
对(pair)、元组(tuple) 【5】

pair 使用:

pair<int, string> p = {1, "hello"};
cout << p.first << " " << p.second << endl;

tuple 使用:

tuple<int, string, double> t = {1, "test", 3.14};
cout << get<0>(t) << " " << get<1>(t) << endl;
集合(set)、多重集合(multiset) 【5】

set 使用:

set<int> s = {3, 1, 4, 1, 5};  // {1, 3, 4, 5}
s.insert(2);                   // 插入元素
if (s.find(3) != s.end()) {     // 查找元素cout << "Found" << endl;
}

multiset 使用:

multiset<int> ms = {1, 1, 2, 2, 3};  // 允许重复元素
双端队列(deque)、优先队列(priority_queue) 【5】

deque 使用:

deque<int> dq;
dq.push_front(1);    // 前端插入
dq.push_back(2);     // 后端插入
int front = dq.front(); // 访问前端
int back = dq.back();   // 访问后端

priority_queue 使用:

// 最大堆(默认)
priority_queue<int> maxHeap;
maxHeap.push(3);
maxHeap.push(1);
maxHeap.push(4);
cout << maxHeap.top() << endl;  // 输出4// 最小堆
priority_queue<int, vector<int>, greater<int>> minHeap;
映射(map)、多重映射(multimap) 【5】

map 使用:

map<string, int> m;
m["apple"] = 5;
m["banana"] = 3;for (auto& [key, value] : m) {cout << key << ": " << value << endl;
}

multimap 使用:

multimap<string, int> mm;
mm.insert({"fruit", 1});
mm.insert({"fruit", 2});  // 允许重复键
算法模板库中的常用函数 【5】

排序和查找:

#include <algorithm>
vector<int> v = {5, 3, 1, 4, 2};sort(v.begin(), v.end());          // 排序
auto it = find(v.begin(), v.end(), 3); // 查找if (binary_search(v.begin(), v.end(), 3)) {cout << "Found" << endl;
}

数值算法:

int sum = accumulate(v.begin(), v.end(), 0);
int max_val = *max_element(v.begin(), v.end());
int min_val = *min_element(v.begin(), v.end());

变换算法:

transform(v.begin(), v.end(), v.begin(), [](int x) { return x * 2; });

数学公式

时间复杂度计算

常见时间复杂度:

  • O(1)O(1)O(1) - 常数时间复杂度
  • O(log⁡n)O(\log n)O(logn) - 对数时间复杂度
  • O(n)O(n)O(n) - 线性时间复杂度
  • O(nlog⁡n)O(n \log n)O(nlogn) - 线性对数时间复杂度
  • O(n2)O(n^2)O(n2) - 平方时间复杂度
  • O(2n)O(2^n)O(2n) - 指数时间复杂度

空间复杂度计算

S(n)=O(f(n))S(n) = O(f(n)) S(n)=O(f(n))

其中 f(n)f(n)f(n) 表示算法所需的额外空间与输入规模 nnn 的关系。

CSP-S 提高组初赛复习大纲

更新时间:2025 年 9 月 18 日 23:21:08

  • 2.2.1 基础知识与编程环境 & C++ 程序设计
  • 2.2.3 数据结构
  • 2.2.4 算法
  • 2.2.5 数学与其他
http://www.dtcms.com/a/390309.html

相关文章:

  • C++聊天系统从零到一:brpc RPC框架篇
  • Java编程思想 Thinking in Java 学习笔记——第2章 一切都是对象
  • AssemblyScript 入门教程(2)AssemblyScript的技术解析与实践指南
  • 深入理解Java数据结构
  • 【试题】网络安全管理员考试题库
  • 第一章 信息化发展
  • 第六章:实用调试技巧
  • 人工智能通识与实践 - 智能语音技术
  • CSP-S 提高组初赛复习大纲
  • 卷积神经网络CNN-part7-批量规范化BatchNorm
  • [xboard]02 uboot下载、移植、编译概述
  • Python入门教程之字符串运算
  • 堡垒机部署
  • 刷题记录(10)stack和queue的简单应用
  • 如何进行时间管理?
  • Spring面试题及详细答案 125道(46-65) -- 事务管理
  • OA ⇄ CRM 单点登录(SSO)实现说明
  • 人工智能在设备管理软件中的应用
  • __pycache__ 文件夹作用
  • 利欧泵业数据中心液冷系统解决方案亮相2025 ODCC开放数据中心峰会
  • 【论文阅读】Masked Conditional Variational Autoencoders for Chromosome Straightening
  • 天气预测:AI 如何为我们 “算” 出未来的天空?
  • 大数据管理与应用有什么注意事项?企业该如何发挥大数据的价值
  • CSS的opacity 属性
  • STM32 LwIP协议栈优化:从TCP延迟10ms降至1ms的内存配置手册
  • 【0基础3ds Max】创建标准基本体(长方体、球体、圆柱体等)理论
  • 驾驭未来:深度体验 Flet 0.7.0 的重大变革与服务化架构
  • 【Datawhale组队学习202509】AI硬件与机器人大模型 task01 具身智能基础
  • Go语言高并发编程全面解析:从基础到高级实战
  • leetcode算法刷题的第三十八天