• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 分享C++面试中string类的一种正确写法

分享C++面试中string类的一种正确写法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++ string类,c++中string类,c++string类源代码,c++ int转string,c++ char 转string等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

具体来说:

能像 int 类型那样定义变量,并且支持赋值、复制。
能用作函数的参数类型及返回类型。
能用作标准库容器的元素类型,即 vector/list/deque 的 value_type。(用作 std::map 的 key_type 是更进一步的要求,本文从略)。
换言之,你的 String 能让以下代码编译运行通过,并且没有内存方面的错误。

本文给出我认为适合面试的答案,强调正确性及易实现(白板上写也不会错),不强调效率。某种意义上可以说是以时间(运行快慢)换空间(代码简洁)。

首先选择数据成员,最简单的 String 只有一个 char* 成员变量。好处是容易实现,坏处是某些操作的复杂度较高(例如 size() 会是线性时间)。为了面试时写代码不出错,本文设计的 String 只有一个 char* data_成员。而且规定 invariant 如下:一个 valid 的 string 对象的 data_ 保证不为 NULL,data_ 以 '\0' 结尾,以方便配合 C 语言的 str*() 系列函数。

其次决定支持哪些操作,构造、析构、拷贝构造、赋值这几样是肯定要有的(以前合称 big three,现在叫 copy control)。如果钻得深一点,C++11的移动构造和移动赋值也可以有。为了突出重点,本文就不考虑 operator[] 之类的重载了。

这样代码基本上就定型了:

注意代码的几个要点:

只在构造函数里调用 new char[],只在析构函数里调用 delete[]。
赋值操作符采用了《C++编程规范》推荐的现代写法。
每个函数都只有一两行代码,没有条件判断。
析构函数不必检查 data_ 是否为 NULL。
构造函数 String(const char* str) 没有检查 str 的合法性,这是一个永无止境的争论话题。这里在初始化列表里就用到了 str,因此在函数体内用 assert() 是无意义的。
这恐怕是最简洁的 String 实现了。

练习1:增加 operator==、operator<、operator[] 等操作符重载。

练习2:实现一个带 int size_; 成员的版本,以空间换时间。

练习3:受益于右值引用及移动语意,在 C++11 中对 String 实施直接插入排序的性能比C++98/03要高,试编程验证之。(g++的标准库也用到了此技术。)

陈皓注:同时,大家可以移步看看我的一篇老文《STL中String类的问题》

原文链接:http://coolshell.cn/articles/10478.html

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++ 类访问控制的条件总结
  • C++实现String类实例代码
  • C++实现日期类(Date类)的方法
  • C++ string 字符串查找匹配实例代码
  • C++中string的模拟实现
  • 关于C++ string和c类型字符数组的对比
  • C++简单集合类的实现方法
  • 从string类的实现看C++类的四大函数(面试常见)
  • 探究C++中string类的实现原理以及扩展使用
  • 深入解析C++编程中类的封装特性

相关文章

  • 2017-05-28Cocos2d-x UI开发之菜单类使用实例
  • 2017-05-28c++学习之构造函数
  • 2017-05-28MFC实现全屏功能代码实例
  • 2017-05-28构建mfc窗体的简单示例
  • 2017-05-28C语言 函数指针(指向函数的指针)详解
  • 2017-05-28浅析string 与char* char[]之间的转换
  • 2017-05-28浅谈c++中的while(cin)问题
  • 2017-08-17文件的合并与拆分
  • 2017-05-28C++实现将一个字符串中的字符替换成另一个字符串的方法
  • 2017-05-28详解C语言的结构体中成员变量偏移问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++中 map的基本操作
    • c++线程池实现方法
    • 数据结构与算法中二叉树子结构的详解
    • c++中的4种类型转化方式详细解析
    • 对比C语言中memccpy()函数和memcpy()函数的用法
    • C++ 如何用cout输出hex,oct,dec的解决方法
    • C++中delete和delete[]的区别
    • C++输出上三角/下三角/菱形/杨辉三角形(实现代码)
    • Cocos2d-x学习笔记之Hello World源码分析
    • 详解C++编程中的嵌套类的声明与其中的函数使用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有