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

String模拟实现的补充说明

         前文提到过String的模拟实现,这里补充一下测试效果以及整体的一个编写思路

// 测试代码

int main() {

    // 构造函数测试

    bit::string s1("Hello");

    std::cout << "s1: " << s1 << std::endl; // Hello

    // 拷贝构造

    bit::string s2(s1);

    std::cout << "s2: " << s2 << std::endl; // Hello

    // 赋值运算符

    bit::string s3;

    s3 = s1;

    std::cout << "s3: " << s3 << std::endl; // Hello

    // push_back

    s1.push_back('!');

    std::cout << "s1 after push_back: " << s1 << std::endl; // Hello!

    // operator+=

    s1 += '?';

    std::cout << "s1 after += char: " << s1 << std::endl; // Hello!?

    // append

    s1.append("World");

    std::cout << "s1 after append: " << s1 << std::endl; // Hello!?World

    // resize

    s1.resize(5);

    std::cout << "s1 after resize(5): " << s1 << std::endl; // Hello

    // 关系运算符

    bit::string s4("Apple"), s5("Banana");

    std::cout << "s4 < s5: " << (s4 < s5) << std::endl; // true

    // find

    size_t pos = s5.find('n');

    std::cout << "pos of 'n' in s5: " << pos << std::endl; 

    // insert

    s5.insert(0, "Big");

    std::cout << "s5 after insert: " << s5 << std::endl; // BigBanana

    // erase

    s5.erase(3, 3);

    std::cout << "s5 after erase: " << s5 << std::endl; // Bigana

    return 0;

}

运行结果截图:

构造/析构:


string(const char* str = "");
string(const string& s);
~string();
string& operator=(const string& s);
void swap(string& s); 

迭代器:

iterator begin();
iterator end();
const iterator begin() const;
const iterator end() const;

容量相关:

size_t size() const;
size_t capacity() const;
bool empty() const;
void reserve(size_t n);
void resize(size_t n, char c = '\0'); 

元素访问:

char& operator[](size_t index);
const char& operator[](size_t index) const;
const char* c_str() const;

 

修改操作:

void push_back(char c);
string& operator+=(char c);
void append(const char* str);
string& operator+=(const char* str);
void clear();

string& insert(size_t pos, char c);
string& insert(size_t pos, const char* str);
string& erase(size_t pos, size_t len = npos);

 

关系运算符:

bool operator<(const string& s) const;
bool operator<=(const string& s) const;
bool operator>(const string& s) const;
bool operator>=(const string& s) const;
bool operator==(const string& s) const;
bool operator!=(const string& s) const; 

查找:

size_t find(char c, size_t pos = 0) const;
size_t find(const char* s, size_t pos = 0) const; 

友元函数:

//非成员函数想直接访问私有成员

friend std::ostream& operator<<(std::ostream& os, const string& s);
friend std::istream& operator>>(std::istream& is, string& s); 

静态成员:

static const size_t npos = -1;

核心成员变量:

  • char* _str:指向堆上分配的字符数组

  • size_t _size:当前字符串长度

  • size_t _capacity:当前分配的内存容量

 

构造的实现用到strcpy,赋值采用copy-and-swap惯用法实现,关系运算符基于strcmp实现。

find基于strchr和strstr实现

http://www.lryc.cn/news/604996.html

相关文章:

  • 第1课:向量与矩阵运算
  • QT中QTableView+Model+Delegate实现一个demo
  • 【ESP32设备通信】-LAN8720与ESP32集成
  • 如何设计一个站内消息系统:架构设计合集(八)
  • 订单识别技术原理及场景应用
  • 【音视频】WebRTC 开发环境搭建-Web端
  • MYSQL:视图
  • Qt 下载说明
  • uniApp实战六:Echart图表集成
  • 实现implements InitializingBean, DisposableBean 有什么用
  • 【MATLAB/Simulink】查看MATLAB以往版本的帮助文档
  • 牛顿-拉夫森法求解非线性方程组
  • 无人机惯性导航模块运行与技术难点!
  • 25年新算法!基于猛禽的优化算法(BPBO):一种元启发式优化算法,附完整免费MATLAB代码
  • 《数学模型》——最大流与最小费用流问题
  • Mediapipe 的某些模型,网络下载不来可以去gitee找找看
  • 双塔模型 + 自监督学习:解决长尾物品表征难题
  • Helm在Kubernetes中的应用部署指南与案例解析
  • FragmentManager 返回栈与 Activity 运行栈的关系(当按下Back键时屏幕会如何变化?)
  • 基于SpringBoot+MyBatis+MySQL+VUE实现的便利店信息管理系统(附源码+数据库+毕业论文+远程部署)
  • 如何不让android studio自动换行
  • AI服务器中,EEPROM有哪些部件使用,需要存储哪些信息?
  • NLU 语义解析评测实践:基于函数调用的 ACC、ROUGE 与 BLEU 综合指标
  • 《SAM:Segment Anything》论文精读笔记
  • 《CLIP改进工作串讲》论文精读笔记
  • AtCoder Beginner Contest 416(ABCDE)
  • 机器视觉halcon7-缺陷检测
  • 「源力觉醒 创作者计划」_文心大模型 4.5 开源 28 天:从车间轴承到山村课堂的 AI 突围
  • 数据结构-Set集合(一)Set集合介绍、优缺点
  • labview控制软件开发