使用alloctor模板来实现string类】的更多相关文章

虽然以前做过更复杂的各种数据结构,不过那只是在看完c++prime7章后做的,没有考虑到类的拷贝体现出来是类值还是类指针,于是写了一些半成品类,不过那些主要是练数据结构,不想再改,于是就想办法模仿了下string,以前都是使用new和delete,虽然简单,但是不够灵活,于是就刻意使用alloctor模板来管理内存,这样可以将“内存分配”与“对象构造分开”,因为对象并不是指针这类管理外部资源的对象,于是我就干脆不destory,这样使用alloctor效率优势更加有体现,练下手熟,总的来说没什么…
一.string类 1.构造函数 string实际上是basic_string<char>的一个typedef,同时省略了与内存管理相关的参数.size_type是一个依赖于实现的整型,是在string中定义的.string类将string::npos定义为字符串的最大长度,通常为unsigned int的最大值.另外,使用缩写NBTS(null-terminated string)来表示以空字符结束的字符串——传统的C字符串.下面的表格中列出了string的构造函数: 构造函数 描述 str…
C++提供了一组功能强大的库,这些库提供了很多常见编程问题的解决方案以及简化其他问题的工具string类为将字符串作为对象来处理提供了一种方便的方法.string类提供了自动内存管理动能以及众多处理字符串的方法和函数.例如,这些方法和函数让您能够合并字符串.将一个字符串插入到另一个字符串中.反转字符串.在字符串中搜索字符或姊姊富川以及执行输入和输出操作.诸如auto_ptr以及C++11新增的shared_ptr和unique_ptr等智能指针模板使得管理由new分配的内存更容易.如果使用这些智…
参考<21天学通C++>第15和16章节,在对宏和模板学习之后,开启对C++实现的标准模板类STL进行简介,同时介绍简单的string类.虽然前面对于vector.deque.list等进行过学习和总结,但并没有一个宏观上的把握,现在通过上一篇和这一篇博文,将对C++模板以及基于C++模板的STL关联起来,形成一个总体的把握,对于掌握C++中模板(template)这一强有力的工具会十分有帮助.本文的主要内容有: (1) STL容器: (2) STL迭代器: (3) STL算法: (4) ST…
第16章 string类和标准模板库 1. string容易被忽略的构造函数: string(size_type n, char c)长度为n,每个字母都为c string(const string & str, size_type pos = 0, size_type n = pos)初始化为str中从pos开始到结尾的字符,或从pos开始的n个字符 string(const char *s, size_type n)初始化为s指向的前n个字符,即使超过了s的结尾: string(Iter b…
面向对象 类是由属性和方法组成 类是所有创建对象的模板 实例变量有默认值 实例变量至少在本类范围中有效 实例变量与局部变量冲突时,局部变量优先 类中方法定义类似于函数定义 修饰符 返回值类型 方法名(参数1,参数2) 异常{ 方法体 } 方法重载 参数个数不同 参数类型不同 参数类型相同但是顺序不同 传入参数的不同自动选取相应方法:典型例子system.out.println(整形,字符串等); 构造方法 1.构造方法无返回值 2.不定义的情况下,有默认的空构造方法 3.在对象构造时,被自动调用…
类 <string> std::string String类的定义 , 其也是个模板类 typedef basic_string<char> string; String class Strings是代表一串字符的对象 标准string类提供了类似于标准容器的接口,但是增加处理字符串所需的特殊的特征 string是basic_string 类模板使用char类型作为字符类型实现的类.使用默认的字符特征和分配器类型.成员类型 成员类型 定义 value_type char trait…
1.概念 Scott Meyers在<More Effective C++>中举了个例子,不知你是否还记得?在你还在上学的时候,你的父母要你不要看电视,而去复习功课,于是你把自己关在房间里,做出一副正在复习功课的 样子,其实你在干着别的诸如给班上的某位女生写情书之类的事,而一旦你的父母出来在你房间要检查你是否在复习时,你才真正捡起课本看书.这就是“拖延战 术”,直到你非要做的时候才去做. 当然,这种事情在现实生活中时往往会出事,但其在编程世界中摇身一变,就成为了最有用的技术,正如 C++中的可…
一.string的初始化 首先,为了在程序中使用string类型,必须包含头文件 <string>.如下: #include <string> 注意这里不是string.h,string.h是C字符串头文件. string类是一个模板类,位于名字空间std中,通常为方便使用还需要增加: using namespace std; 声明一个字符串变量很简单: string str; 测试代码: #include <iostream> #include <string&…
一.string的初始化 首先,为了在程序中使用string类型,必须包含头文件 <string>.如下: #include <string> 注意这里不是string.h,string.h是C字符串头文件. string类是一个模板类,位于名字空间std中,通常为方便使用还需要增加: using namespace std; 声明一个字符串变量很简单: string str; 测试代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1…
String 类继承自 Object 超类,实现的接口有:Serializable.CharSequence.Comparable<String> 接口,具体如下图: 一.常用的String 类构造方法 //1.由字符串original复制得到新的字符串 public String(String original) { this.value = original.value; this.hash = original.hash; } //2.得到值等于value的字符串 public Stri…
http://blog.csdn.net/liuliming3000/article/details/1809385 1 从C到C++ string类 2 string类的构造函数 3 string类的字符操作 4 string的特性描述 5 string类的输入输出操作 6 string的赋值 7 string的连接 8 string的比较 9 string类的查找函数 10 string类的替换函数 11 string类的插入函数 12 string类的删除函数 13 string类的迭代器…
string类在c++中是一个模板类,位于名字空间std中,注意这里不是string.h,string.h是C字符串头文件. 将string类型转换为字符数组char arr[10];string s("ABCDEFG");int len = s.copy(arr, 9);arr[len] = '\0';或者char arr[10];string s("ABCDEFG");strcpy(arr, s.c_str());//strncpy(arr, s.c_str()…
前言   上个周末在和我的同学爬香山闲聊时,同学说到STL中的string类曾经让他备受折磨,几年前他开发一个系统前对string类还比较清楚,然后随着程序的复杂度的加深,到了后期,他几乎对string类失去了信心和信任,他觉得他对string类一头雾水.老实说,我几年前也有同样的痛苦(就是当我写下<标准C++类string的Copy-On-Write技术>之前的一段时间).那时,我不得不研究那根本不是给人看的SGI出品的string类的源码,代码的可读性几乎为零,而且随着了解越深入,就越觉得…
16.1.1 构造字符串程序清单16.1使用了string的7个构造函数.程序清单16.1 str1.cpp--------------------------------------------------// str1.cpp -- introducing the string class#include <iostream>#include <string>// using string constructors int main(){    using namespace…
Deadline: 2017-3-28 23:00 一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握基本数据类型和引用数据类型的区别 理解对象的生成与引用的关系 掌握构造方法的重载 掌握String类和数组 二.作业要求 发布一篇随笔,主要包括以下几部分的内容: (一)学习总结 1.学习使用Eclipse关联jdk源代码,查看String类的equals()方法,截图,并学习其实现方法.举例说明equals方法和==的区别. 2.什么是构造方法?什么是构造方法的重载?下面的程序是否可以…
vector 对象 C++标准库中的一个类模板 封装任何类型的动态数组,自动创建和删除. 数组下标越界检查. 将动态数组封装成类的知识点中封装的ArrayOfPoints也提供了类似功能,但只适用于一种类型的数组. vector<元素类型> 数组对象名(数组长度); vector<int> arr(5) //建立大小为5的int数组 1.与一般数组不同,vector数组对象名不表示数组首地址; 2.可以用size函数获得vector数组的长度 unsigned n; cin>…
定义: string类是STL中basic_string模板实例化得到的模板类.其定义如下: typedef basic_string<char>string; 构造函数: string类有多个构造函数,但没有接收一个整型参数或一个字符型参数的构造函数 string s1(); //s1="" string s2("hello"); //s2="hello" string s3(4,'k'); //s3="kkkk"…
今天做一道题,要用string类,涉及大小写转换,查看了C++文档,string类没有提供这样的方法,只好自己写. 之后是想到一个比较笨的方法,我把string当成一个容器,然后用迭代器一个一个来替换. 比如下面的是大写转小写: string temp; string::iterator it; for (it = temp.begin(); it != temp.end(); it++) if ((*it) < 'a') *it = *it + 32; 测试一下代码: #include<io…
关键字:string类  字符串  C-风格字符串  C库字符串函数 字符串:存储在内存的连续字节中的一系列字符. C++处理字符串的方式有两种: 来自C语言,常被称为C-风格字符串: 基于string类库的方法. [C-风格字符串] C-风格字符串:由一系列字符组成,以空值字符结尾. 由字符串的定义——存储在连续字节中的一系列字符,我们可以将字符串存储在char数组中,其中每个字符都位于自己的数组元素中. 请对比下面两个字符数组声明: char dog[8] = {'b', 'e', 'a',…
1.String对象的初始化 string s1;               默认构造函数,s1为空串 string s4(n, 'c');     将s4初始化为字符c的n个副本 string s3(const char,int N) string s3(const char*,int N);  将s3初始化为一个c常量字符串的前N个字符(至多N个) string s2(s1);         将s2初始化s1的一个副本. string s5(const string &,int n=0,…
本文实现了c++ STL中的basic_string模板类,当然.通过typedef也就实现了string类和wstring类.限于篇幅,实现代码中用到了标准库的char_traits模板类,本人自己也实现了 char_traits模板类,为此还写了一篇博客,在我的博客里能够找到,那里的代码全然能够用在这里的basic_string类的实现中,当然,详细加到代码中要稍加修改,以和与basic_string类相关的全局模板函数兼容,如operator >> 模板函数的重载. 经过測试.这里的是实…
---恢复内容开始--- 内存管理 new/delete C语言中提供了 malloc 和 free 两个系统函数,#include "stdlib.h"库函数,完成对堆内存的申请和释放.而 c++则提供了两关键字 new 和 delete ,new delete关键字. 生成单变量空间和数组空间 int *p = (int *)malloc(sizeof(int));//c int *p = static_cast<int*>(malloc(sizeof(int)));/…
就在近日,Facebook宣布开源了内部使用的C++底层库,总称folly,包括散列.字符串.向量.内存分配.位处理等,以满足大规模高性能的需求. 这里是folly的github地址:https://github.com/facebook/folly 在folly项目的Overview.md中,谈到了folly库的初衷: It complements (as opposed to competing against) offerings such as Boost and of course s…
目录 1.简介 2.string类成员函数汇总 3.String类的构造函数以及析构函数 4.获取字符串长度 5.获取字符串元素 6.字符串比较方法 7.字符串输入输出 8.字符串查找函数 1.简介 要使用 string 类,必须包含头文件 <string>.string 库提供了许多其他功能,如删除字符串的部分或全部,用一个字符的部分或全部替换另一个字符串的部分或全部,插入.删除字符串中数据,比较.提取.复制.交换等. 2.string类成员函数汇总 表 1 string 类的所有成员函数…
初始化: string类的初始化是不可以用字符进行的,如; string str='c'; string str('c');必须传递字符串字面量作为参数:string本身是用模板类进行实例化的类. string 类是变长度的 用length()方法返回对象的长度,同时string类不同于c语言中char 数组,最后没有\0结尾,若想变换,则使用c_str方法,该方法返回一个char数组类型的字符串.同样可以用下标访问[]类似字符数组.或者使用方法at():比如 str.at(i)='c'; st…
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够.字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要.我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?).我们尽可以把它看成是C++的基本数据类型. 标准模板库(STL)提供了一个std::string类,其是std::basic_string的一个特化,它是一个容器类,可把字符串当作普通类型来使用,并支持比…
1.一些C++基础知识 模板类string的设计属于底层,其中运用到了很多C++的编程技巧,比如模板.迭代器.友元.函数和运算符重载.内联等等,为了便于后续理解string类,这里先对涉及到的概念做个简单的介绍.C++基础比较扎实的童鞋可以直接跳到第三节. 1.1 typedef 1.1.1 四种常见用法 定义一种类型的别名,不只是简单的宏替换.可用作同时声明指针型的多个对象 typedef char* PCHAR; PCHAR pa, pb; // 同时声明两个char类型的指针pa和pb c…
下面的程序并没有把String类的所有成员方法实现,只参考教程写了大部分重要的成员函数. [cpp] view plain copy #include<iostream> #include<iomanip> using namespace std; class String{ friend ostream& operator<< (ostream&,String&);//重载<<运算符 friend istream& oper…
1.前言 最近看了下<C++Primer>,觉得受益匪浅.不过纸上得来终觉浅,觉知此事须躬行.今天看了类类型,书中简单实现了String类,自己以前也学过C++,不过说来惭愧,以前都是用C来写程序,学的C++基本都忘记了,也说明自己以前对C++的理解不够深入.基于这些,觉得有必要动手来写写C++的一些程序了,毕竟C++有很多的功能是C所不具备的.正好看了课本中String类的简单实现,而且string类在C++中的使用频率也很高,了解其内部的实现是很有必要的.所以今天打算写个string类,就…