首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问个stl:vector:resize(size_type _Newsize, _Ty _Val)函数的有关问题

2012-02-24 
请教个stl::vector::resize(size_type _Newsize, _Ty _Val)函数的问题该函数实现如下,摘自list/vs2005:voi

请教个stl::vector::resize(size_type _Newsize, _Ty _Val)函数的问题
该函数实现如下,摘自list/vs   2005:
void   resize(size_type   _Newsize,   _Ty   _Val)
{
if   (_Mysize   <   _Newsize)
        _Insert_n(end(),   _Newsize   -   _Mysize,   _Val);
else
        while   (_Newsize   <   _Mysize)
pop_back();
}

这里为什么要是
void   resize(size_type   _Newsize,   _Ty   _Val)
而不是
void   resize(size_type   _Newsize,   const   _Ty&   _Val)
其中
void   _Insert_n(iterator   _Where,   size_type   _Count,   const   _Ty&   _Val)


[解决办法]
如果 2)中是void resize(size_type _Newsize, const _Ty& _Val),
那么 1)中可以这样写吧:
typename _Ty ty;
resize(_Newsize, ty);

所以我觉得不是为了满足1)中的语法而不使用const _Ty&。而是因为用法。
因为编写2)的人知道,使用2)的所有地方都不存在效率上的节约,比如1)处的使用,构造一个对象是必须的,所以不必用引用。


[解决办法]
看SGI STL 3.0中的实现:

void resize(size_type new_size, const T& x) {
if (new_size < size())
erase(begin() + new_size, end());
else
insert(end(), new_size - size(), x);
}
void resize(size_type new_size) { resize(new_size, T()); }

[解决办法]
就忍了吧。STL里的代码有点小毛病也很正常。
[解决办法]
毛病总会有的 ...

STL 需要考虑太多的因素,
有很多折衷的地方 ...
[解决办法]
两种方法都可以,看实现。
+
STL 需要考虑太多的因素,
有很多折衷的地方 ...
=======================
同感之,呵呵^_^,okokok
[解决办法]
是必须这么做了,因为要考虑编译器兼容的问题

比如

struct ST
{

}

void Fun(ST& st)
{

}

然后

Fun(ST());

这个在vc是可以编译过的,而且ST()的生命周期为Fun函数体


但在gcc 上是编译不过的

error: invalid initialization of non-const reference of type 'ST& ' from a temporary of type 'ST '
GCC这样用会编不过,错误就是说ST是个临时的,不能引用


所以由于上面偶说的 1) 的存在, 2) 必须传值

热点排行