【23.12.27、28笔记】C++ Primer自学 Day2-3

本文介绍了C++中的内置数组数据类型、动态内存分配(包括指针)以及基于对象的设计,强调了数组操作限制、动态内存的使用规则和类的概念。

二、C++浏览

1、内置数组数据类型【array】

        数组是一种顺序容器,包含单一类型的元素。

        数组的下标从0开始。【容易发生“一位偏移错误”,导致越界】

        C++对数组的支持,仅限于对其中单个元素进行操作,不支持数组的抽象和对整个数组的操作。【譬如不能直接把一个数组复制给另一个使用】

Q1:为什么内置数组类型不支持数组之间的赋值,支持这样的赋值需要什么信息?

        {需要数组中元素的数据类型,数组的长度等信息}因为在创建数组时,内存大小的类型已经被确定了。

Q2:一等公民的数组应该支持怎样的操作?

          直接赋值,直接比较等等

2、动态内存分配和指针

        C++中的对象分配内存可以动态分配也可以静态分配。

        静态分配:编译器在处理程序源代码时分配内存。【程序执行前】

        动态分配:程序执行时调用运行时刻库函数来分配。

静态分配实例:指示器分配足够的储存区给变量

int ival1 = 1024;

        有两个值和对象ival有关系,一个是储存的值,另一个是它的地址。可以通过指针来访问地址:其中&是取址符,能返回对象的地址,*是解引用符,用于访问其地址指向的对象。【指针的主要作用并不在此,而是在于管理和操作动态空间】

int *p; //一个指向int类型的指针
int *p1;
p = &ival; //让p指向ival地址
*p = *p+1; //等价于 ival = ival+1

        静态动态主要区别:1、是否能直接对对象进行操作;2、对象的分配和释放是否需要自己管理。【对于动态需要new和delete表达式来管理】

        new的两种表达式:

int *p = new int(1024);//使用小括号分配一个int类型的对象,但是它没有名字,只返回其动态分配的地址。
int *p = new int[4];//使用中括号分配一个int类型的数组对象,但是不能赋值,返回的也是地址

        delete的两种表达式:

delete p; //删除单个对象
delete []p;//删除一个对象数组

        动态分配的内存一定要显式地去删除,否则会出现内存泄漏的问题【泄漏指的是,我们动态分配了内存后,如果没有返还,下次使用时,就没有指向这个地址的指针,再用不了这个内存,相当于泄漏了】。

Q1:说出下面定义的四个对象之间的区别
                (a) int ival = 1024; (c) int *pi2 = new int( 1024 );
                (b) int *pi = &ival; (d) int *pi3 = new int[ 1024 ];
        a和b一个是声明的变量,一个声明的是指向变量的指针,两者使用的内存都是静态的内存;c和d都是使用new声明的动态内存,c是整型,d是数组。
Q2:下面的代码段是做什么的,有什么严重错误?注意:指针 pia 的下标操作符的用法是正
确的 在 3.9.2 节中我们会解释其理由
                int *pi = new int( 10 );
                int *pia = new int[ 10 ];
                while ( *pi < 10 ) {
                pia[ *pi ] = *pi;
                *pi = *pi + 1;
                }
                delete pi;
                delete [] pia;
            因为在循环中,使用的是pi这个指针,然而指针指向的动态内存只声明了一个整型变量,可能存在越界的问题。

3、基于对象的设计

        类的一般形式:

class  classname{
public:
//公共接口
private:
//私有接口
};

        其中:class、public、private是C++语言的关键字,classname是用户定义的标志符。创建完之后,相当于新加了一个数据类型,在使用时,可以和基本的类型一样使用:

// 单个 IntArray 类对象
IntArray myArray; 
// 指向 IntArray 类对象的指针
IntArray *pArray = new IntArray;

        类体内包含成员定义以及访问标签【public、private】,类的成员包括函数和变量。

        两种访问成员的方式:对于类的对象,使用.;对于类的指针对象,使用->。

<think>好的,我需要帮助用户解决如何正确搜索并安装RAPIDS包及其特定版本的问题。用户之前遇到了找不到25.04版本的情况,现在可能已经了解版本号的问题,但仍然需要具体的步骤。 首先,回顾之前的对话,用户运行了`conda search -c rapidsai rapids=25.04`,但没有找到结果。我之前的回答指出,25.04版本可能尚未发布,或者需要检查通道配置。现在用户进一步询问如何正确搜索和安装特定版本,可能需要更详细的步骤。 用户提到参考了站内引用,其中提到了配置下载源和激活环境。不过用户当前的关注点是搜索版本和安装方法,所以需要聚焦于conda命令的正确使用,通道配置,版本查询等。 接下来,我需要确定用户的需求是:1. 如何正确搜索RAPIDS包的可用版本;2. 如何安装特定版本。同时,用户可能需要了解版本命名规则,确保输入正确。 首先,确认搜索命令的正确性。用户应该使用`conda search -c rapidsai rapids`来列出所有可用版本,而不是指定尚未发布的版本。如果用户需要特定版本,比如24.06,应确保版本号正确,并检查通道是否正确添加。 然后,安装步骤需要包括创建环境、指定通道、版本和依赖项。例如,安装24.06版本需要指定Python版本和CUDA工具包版本。用户可能还需要了解如何配置通道优先级,避免冲突。 另外,用户可能需要处理常见的错误,比如通道未正确添加,版本号格式错误,或者依赖不兼容。需要提供解决方案,例如如何修复通道配置,使用`--override-channels`来强制指定通道,或者检查CUDA版本是否符合要求。 还需要考虑用户可能对夜间版本感兴趣,因此需要提到`rapidsai-nightly`通道,并说明其用途和风险,即可能包含不稳定版本。 最后,整理步骤,确保结构清晰,分点说明,并附上验证安装是否成功的方法,比如导入库并检查版本。同时,提供常见问题的解答,如处理包未找到错误,调整通道优先级等。 总结,回答应包括: 1. 搜索可用版本的命令和注意事项。 2. 安装特定版本的详细步骤,包括通道配置和依赖管理。 3. 验证安装的方法。 4. 常见问题处理。 5. 相关问题的扩展,帮助用户进一步解决可能遇到的问题。</think>### RAPIDS包版本查询与安装指南 --- #### 一、**精确搜索RAPIDS版本** 1. **列出所有可用版本** ```bash conda search -c rapidsai --override-channels rapids # 强制仅从rapidsai通道搜索 ``` - **输出关键字段**: - `Version`:版本号(格式为`YY.MM`,如`24.06`) - `Build`:构建标识(如`py310_0`表示Python 3.10环境) - **示例输出**: ``` # Name Version Build rapids 24.06.00 py310_0 rapids 24.04.00 py310_0 ``` 2. **过滤特定版本** 若需检查`24.06`是否存在: ```bash conda search -c rapidsai "rapids=24.06" # 引号确保版本号解析正确 ``` --- #### 二、**安装指定版本的RAPIDS** ##### 核心命令(以24.06为例) ```bash conda create -n rapids-env -c rapidsai -c nvidia -c conda-forge \ rapids=24.06 python=3.10 cudatoolkit=12.2 ``` - **参数解析**: - `-n rapids-env`:创建名为`rapids-env`的独立环境 - `-c rapidsai`:优先从RAPIDS官方通道下载 - `cudatoolkit=12.2`:必须匹配RAPIDS版本的CUDA要求[^1] - `python=3.10`:需兼容RAPIDS版本(24.06不支持Python 3.12) ##### 验证安装 ```bash conda activate rapids-env python -c "import cuml; print(cuml.__version__)" # 应输出类似24.06.00 ``` --- #### 三、**常见问题排查** 1. **错误:`PackageNotFoundError`** - **原因1**:通道未正确配置 ```bash conda config --add channels rapidsai # 添加通道 conda config --set channel_priority strict # 强制通道优先级 ``` - **原因2**:版本号格式错误 - 错误写法:`rapids=24.6` → 正确应为`rapids=24.06` 2. **CUDA版本冲突** - **检查CUDA兼容性**: ```bash nvidia-smi # 查看GPU驱动支持的CUDA版本 conda list cudatoolkit # 查看当前环境CUDA版本 ``` - **解决方案**: 安装时显式指定`cudatoolkit=12.2`(与RAPIDS 24.06兼容) 3. **加速下载** 配置国内镜像源(如清华源): ```bash conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/rapidsai/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/nvidia/ ``` --- #### 四、**版本兼容性参考表** | RAPIDS版本 | 发布日期 | 支持CUDA版本 | 支持Python版本 | |------------|------------|--------------|----------------| | 24.06 | 2024年6月 | 12.2 | 3.10, 3.11 | | 24.04 | 2024年4月 | 12.0 | 3.9, 3.10 | | 23.12 | 202312月 | 11.8 | 3.8, 3.9 | --- ### 相关问题 1. **如何查看已安装的RAPIDS组件版本?** 2. **RAPIDS与PyTorch/TensorFlow的兼容性如何?** 3. **升级RAPIDS版本时需要注意哪些依赖变化?** [^1]: RAPIDS版本要求:https://docs.rapids.ai/install#requirements [^2]: Conda镜像源配置:https://mirror.tuna.tsinghua.edu.cn/help/anaconda/
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值