c++primer问题,请大家进来看看

来源:百度知道 编辑:UC知道 时间:2024/07/01 07:33:14
//p585页(14.4.2 类对象的vector)
作为一般的设计原则,类对象的vector 仅仅最适合于元素的插入操作,也就是,我们定义一个空的vector。 如果我们先预算出要插入的元素的数目,或者能够比较准确地猜出来,那么我们可以预留相应的存储区。然后而进行元素插入。例如:
vector < Point > cvs; // 空
int cv_cnt = calc_control_vertices(); ①
// 预留内存以便存放 cv_cnt Point 对象
// cvs 仍然是空的...
cvs.reserve( cv_cnt );
// 打开一个文件并准备迭代它
ifstream infile( "spriteModel" );
istream_iterator <Point> cvfile( infile ),eos;
// ok, 现在插入元素
copy( cvfile, eos, inserter( cvs, cvs.begin() ));
[copy() inserter 类和istream_iterator 在第12 章讨论]list 和deque 对象的定义与vector 对象有相同的行为。把一个类对象插入到每一种容器类型中,都是通过拷贝构造函数来实现的

问:①处的calc_control_vertices()是个什么函数?C++的函数还是作者自己写的函数?没有上下文的解释,有点迷惑。

这一段讨论的是,可以给vector预留一段空间
这个函数不管大雅,不要管他好了。
有时候读书要灵活些,掌握精神就好。
然后自己试一试。

比如学校里大约有1000名学生,CStrudent是一个学生的类。
用vector可以
int n1 = 1000;
vector<CStrudent> s;
s.reserve(n1);
...
for (long i=0; i<n2; i++)
s.push_back(某个学生的类);

那么添加时,成员个数小于1000时都没有内存装满的
问题,于是效率比较高。
内存装满的处理是你看不到的,而且小的应用根本感觉不到。
现在的机器非常快。自己可以编程试试。巨大的数组可能有些许差异。
反正那个函数是什么函数无所谓。

楼上说的挺有道理,不要太在乎函数的样子,只要掌握它的精神!!