C++中vector和string类是怎么实现输入的?

为什么可以输入任意长的数组??教我一下具体代码是怎么样的,顺便讲解一下^_^... 为什么可以输入任意长的数组??
教我一下具体代码是怎么样的,顺便讲解一下^_^
展开
 我来答
heresy_me
2011-12-22 · TA获得超过1719个赞
知道小有建树答主
回答量:1708
采纳率:42%
帮助的人:303万
展开全部
其实是用new运算符,new运算符用于分配堆空间。new的基本语法是"new 类型名";和"new 类型名[]"。前者分配单个对象,后者是比较数组的。还有其他的语法,我这里只说三种。第二种是带赋值的语法:"new 类型名(该类型的一个对象),用于赋值给分配到的空间;和"new 类型名[] { 该类型的对象的列序 };,用于分别赋值给分配到的数组空间。还有一种语法就是“new(指针) 类型名(赋值对象),同上,有对数组的语法,它们是把空间分配到此指针所指的空间上,赋值对象可有可无。
标准库里有一个std::allocator模板,在<memory>里定义,下面是一些源码:
namespace std {
template<class T> class allocator {
// ...
typedef size_t size_type;
T* allocate(size_type sz,int =0); // 比较sz个空间
void constuct(T* p, const T& value) { new (p) T(value); } //分配赋值。
// ...
};
template<class Char_type> char_traits { }; // 为空,一切的类型都是通过对这个类型的专门化来做的,而char_traits<char>和char_traits<wchar_t>是做了专门化,里面有一些char_type的比较函数,比整数到字符类型的转化等。
// 这样,string和vector的实现就好像这样:
template<class Char_type, class Traits=char_traits<Char_type>,class Alloc = allocator<Char_type> > class string {
// ...
Alloc alloc;
Char_type* all_ptr;
void push_back(Char_type val); 用alloc.construct即new (pointer) Char_type(val);来实现
string operator+(const char* p);
};
}
zhrtao
2011-12-22 · 超过25用户采纳过TA的回答
知道答主
回答量:71
采纳率:0%
帮助的人:71.3万
展开全部
vector 底层实现机制,可以参考《STL源码剖析》 侯俊杰(侯捷)著~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式