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

为什么可以输入任意长的数组??
教我一下具体代码是怎么样的,顺便讲解一下^_^

其实是用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);
};
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-22
vector 底层实现机制,可以参考《STL源码剖析》 侯俊杰(侯捷)著~

C++中vector和string类是怎么实现输入的?
void push_back(Char_type val); 用alloc.construct即new (pointer) Char_type(val);来实现 string operator+(const char* p);};}

c++怎么输入一个二维字符串组,每个字符串中间没有空格,连续输入,输入...
include <iostream>#include <string>using namespace std;int main(){\/\/ result 是一个向量, 装所有你输入的无空格字符串 vector<string> result(0);\/\/ 你每个输入的字符串都暂时存到word里 string word("");\/\/ 输入直到你键入 ctrl+z 才能停止 while (cin >> word){ result....

c++中如何对向量输入数据?
vector <int> v;int num;for(int i=0; i<5; i++) \/\/以输入5个数为例 { cin >> num;v.push_back(num);} return 0;}

c++ stl里的向量vector非常好用,那么它是怎么实现的呢
vector从功能上来讲,属于顺序存储容器,所以底层实现一般基于数组。vector使用模板元编程技术实现,具体一点就是编译器根据使用时指定的实际类型在编译时执行模板特化,编译出对应的代码。也就是说vector<int> v1; vector<double>v2;它们各对应一个特化版本的代码。这提高了代码的抽象级别,但是对带来了代...

用c++怎样实现输入一个编号出来一个目的地。输入一个目的地有很多种编号...
你这个相当于一对多的对应问题。其实应该用数据库处理。不过既然说是C++了,也是可以实现的。include <iostream> include <vector> include <string> include include <iterator> using namespace std;class Relation { map<int, string> r1;map<string, vector<int>> rn;public:void AddRelation(int ...

c++中的vector用法
创建vector:使用vector创建一个type类型的vector,type可以是int,double,string等任何数据类型。cpp 复制 std::vector vec; \/\/ 创建一个空的int类型的vector 添加元素:使用push_back()在vector末尾添加元素,或使用insert()在指定位置插入元素。cpp 复制 vec.push_back(1); \/\/ 在末尾添加一个int...

c++ vector的插入问题
反之亦然。你自己可以写个程序验证下。例如;vector<string> vs;string s="nihao";vs.push_back(s);vs[0]="";你会发现即使修改了向量中的元素,但是原来的s是没有变化的。同理插入也是一样的。这个概念要牢记 容器元素都是副本。不仅对vector如此,对其他容器也是一样的。

关于C++中的vector的输入
using namespace std;struct C_list { string Name;int No;int Level;};struct Flight { string terminus;string F_no;string Pl_no;string date;int C_total;int C_rest;list<C_list> Passengers;queue<C_list> W_passengers;};Flight Input(){ Flight typein;cout << "请输入航班终点站...

如何往一个vector中输入一些数字?c++高手进来
{ vector<int> vec;int temp=0;cout << "输入整数,以任意字母结束:" << endl;while(cin >> temp) \/\/如果不确定输入数字个数,可以用这种方式 { vec.push_back(temp); \/\/填充数据 } int count = vec.size();for (int i=0;i<count;i++){ cout << vec[i];} cout << ...

c++中实现从键盘输入数据到一个向量vector,
int main{vector<char>vchar c;while((c = getchar()) != '\\n')v.push_back(c)。for(auto it : v) cout << it; cout << endl; return 0。工作原理:C++语言的程序因为要体现高性能,所以都是编译型的。但其开发环境,为了方便测试,将调试环境做成解释型的。即开发过程中,以...

相似回答