[练习:]从文件中按行读入,放入一个StrBlob中,然后用一个StrBlobPtr打印出来.
StrBlob record;
ifstream in_file("text.txt" );
string line;
while (getline(in_file,line))
record.push_back(line);
for (auto p = record.begin (), end = record.end (); p != end ; p.incr())
cout << p.deref()<<endl;
return 0 ;
}
==========================================================
C++标准库提供了动态数组的管理:T* p =new T [],也提供了用unique_ptr来管理动态数组的办法.
[练习]将两个字符串常量连接后保存到一个动态数组里面.
auto p = new char[100]();
strcat_s(p, 100, "aaaa");
strcat_s(p, 100, "bbbb");
cout << p;
delete[] concatenate_string;
allocator类,new在灵活性上有一些局限性,因为它把分配内存和构造对象结合在一起.当我们分配较大的一块内存时,总是希望将内存分配与对象构建分离,这意味着我们可以分配大内存,但只有需要的时候才创建对象.allocator类定义在文件memory中,它分配的内存是原始的,未构造的。并且提供了一系列的操作来支持.
[练习]使用一个allocator类来读取n个字符串的输入并且输出后还原内存
int n = 5 ;
allocator<string > a;
auto const p = a.allocate(n);
auto q = p;
string s;
while (cin >> s&&q != p + n)
a.construct(q++, s);
for (size_t i = 0 ; i != n; ++i)
cout <<p[i]<<" " ;
while (q != p)
a.destroy(--q);
a.deallocate(p, n);