- 博客(13)
- 收藏
- 关注
原创 C++初始化顺序
//如果要用这种把int size放在int* pArray前面,因为在C++中,成员变量的初始化顺序是按照。//因此,当pArray使用size时,size还没有被初始化,这会导致未定义行为。//在初始化列表中使用了成员变量size来初始化pArray指针,//它们在类定义中出现的顺序,而不是它们在初始化列表中的顺序。//它们在类定义中出现的顺序,而不是它们在初始化列表中的顺序。//此时size还没有被赋予x的值,因为它的初始化还没有完成。//简单的来说size(x)是将x的值赋给size成员变量,
2024-11-23 20:39:39
336
原创 c++构造函数和析构函数
#include<iostream>using namespace std;class A{public: A() { cout<<"无参构造A()"<<endl; this->a=0; this->b=0; } A(int a,int b) { cout<<"有参构造A(int a,int b)"<<endl;
2024-10-26 22:34:56
388
原创 c++string类中相关函数
`replace(size_t pos, size_t len, const string& str)`:替换从`pos`开始的`len`个字符为`str`。- `string(size_t n, char c)`:创建一个由`n`个字符`c`组成的字符串。- `append(size_t n, char c)`:在当前字符串的末尾追加`n`个字符`c`。- `assign(size_t n, char c)`:将`n`个字符`c`赋值给当前字符串。
2024-10-17 21:14:44
330
原创 C++中基类的构造函数不定义成虚析构函数会怎样
在上面的代码中,`Base` 类的析构函数不是虚函数。当我们创建一个 `Derived` 类型的对象,并通过 `Base` 类型的指针删除它时,只有 `Base` 类的析构函数会被调用,而 `Derived` 类的析构函数则不会。如果基类有一个非虚的析构函数,当通过基类的指针删除派生类的对象时,会发生未定义行为。这样,当通过基类的指针删除派生类的对象时,C++ 运行时会确保首先调用派生类的析构函数,然后调用基类的析构函数,从而保证资源的正确释放和对象的完全析构。
2024-06-17 12:38:42
277
原创 c++初始化列表的使用
在这个例子中,`Cm`类有一个构造函数`Cm(int& ref)`,它接受一个`int`类型的引用作为参数,并将其用于初始化引用成员`c`。在`main`函数中,我们创建了一个`int`类型的变量`someInt`,然后使用它的引用来实例化`Cm`对象`cm`。这样,`cm.c`就会引用`someInt`。在您提供的代码中,并没有定义构造函数,因此编译器不知道如何初始化`c`成员。要解决这个问题,您可以为`Cm`类添加一个构造函数,并在构造函数中初始化引用成员`c`。// 构造函数,初始化引用成员c。
2024-06-08 16:51:23
145
原创 c++deque容器的模拟实现代码
/ 构造函数,初始化 blockSize,head 和 tail 指针。// 提供 rend() 方法,返回指向双端队列头部之前一位的逆向迭代器。// 提供 rbegin() 方法,返回指向双端队列尾部的逆向迭代器。// 提供 end() 方法,返回指向双端队列尾部之后一位的迭代器。// 提供 begin() 方法,返回指向双端队列头部的迭代器。// 定义一个内部结构 Node,用于表示双端队列的节点。// 指向双端队列尾部的指针。// 构造函数,初始化 node 和 index。Node* node;
2024-06-02 10:45:56
321
原创 c++duque容器的相关知识和相关代码
在 C++ STL 中,`deque` 是标准模板库中的一个容器适配器,提供了一个动态数组的功能,但与 `vector` 不同的是,`deque` 允许在两端快速地插入和删除元素。2. **动态数组**:内部使用数组实现,但与 `vector` 不同,`deque` 可以动态地增加和减少其大小。- `deque` 的性能在随机访问和迭代器失效方面不如 `vector`,但在两端操作方面优于 `vector`。- `deque` 的迭代器是双向迭代器,不同于 `vector` 的随机访问迭代器。
2024-06-02 10:26:35
328
原创 vector容器大致模拟实现
*注意**:这个简化的模拟代码仅用于演示`std::vector`的某些底层实现原理,并没有实现`std::vector`的所有功能和优化。在实际应用中,应直接使用STL提供的`std::vector`,因为它经过了优化,提供了更高效、更安全的操作。C++中的`std::vector`是基于动态数组实现的。以下是`std::vector`实现原理的一个简化示例,以及一些关键操作的模拟代码。`std::vector`需要处理迭代器的失效问题,确保它们在操作后仍然有效。// 当前分配的内存大小。
2024-05-31 18:28:48
405
原创 c++vector容器详细内容和相关代码
18. **Iterators(迭代器)**:`vector`提供了多种迭代器,如`begin()`、`end()`、`rbegin()`、`rend()`、`cbegin()`、`cend()`、`crbegin()`和`crend()`,用于访问容器中的元素[^1^]。`capacity`必然大于等于`size`[^1^]。16. **Element access(元素访问)**:可以通过下标`[]`、`at()`、`front()`、`back()`和`data`等方法访问元素[^1^]。
2024-05-30 23:42:32
310
原创 C++中的`string`类及其相关函数以及相关代码辅助理解
`replace(size_type pos, size_type len, const string& str)`: 用`str`替换从位置`pos`开始的`len`个字符。- `substr(size_type pos = 0, size_type len = npos)`: 返回从位置`pos`开始的、长度为`len`的子串。- `find(const string& str, size_type pos = 0)`: 从位置`pos`开始查找子串`str`。// 查找第一个'l'或'o'
2024-05-29 20:30:11
318
原创 c++字符串相关函数
`replace(pos, len, "new")`:从位置`pos`开始,替换长度为`len`的部分为"new"。` 将`str1`和`str2`连接后赋值给`str`。- `substr(pos, len)`:从位置`pos`开始获取长度为`len`的子串。- `erase(pos, len)`:从位置`pos`开始删除长度为`len`的部分。- `insert(pos, "new")`:在位置`pos`插入子串"new"。- `size()` 或 `length()`:返回字符串的长度。
2024-05-29 20:24:57
157
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人