| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 632 人关注过本帖
标题:[讨论]关于STL的问题
只看楼主 加入收藏
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
 问题点数:0 回复次数:9 
[讨论]关于STL的问题
由于想更加好的运用STL 和重新认识数据结构,最近我在看SGI 的STL源代码,看到vector的实现方法的时候,发现了个问题 那就是 填充元素的两个函数  unitialize_fill 和 fill ,看了MSDN之后,还是不能区别两个函数有什么区别,事实上,我将里面的代码抽出来,将本来unitialize_fill 的地方换成 fill,都是正常的运行,请问,这两个函数有什么本质的区别?是否新动态分配的内存,用unitialize_fill 填充会快点??
搜索更多相关主题的帖子: STL 
2007-09-09 18:09
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
fill函数我就知道,

unitialize_fill有吗?查不到啊!

Fight  to win  or  die...
2007-09-09 22:33
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 

我也没听说过这个


Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2007-09-09 22:37
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 

uninitialized_fill 不好意思,打快了,少了个d
MSDN 是这样说的 Copies objects of a specified value into an uninitialized destination range.
从这里我完全看不出跟fill有什么区别,难道如果内存上还没有初始值,用这个会快一些?

[此贴子已经被作者于2007-9-9 22:52:50编辑过]


c++/C + 汇编 = 天下无敌
2007-09-09 22:50
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 

有的有的,再细看一下代码还是可以发现的
fill:Assigns the same new value to every element in a specified rangeThe destination range must be valid; all pointers must be dereferenceable, and the last position is reachable from the first by incrementation. The complexity is linear with the size of the range.


uninitialized_fill :Copies objects of a specified value into an uninitialized destination range.This algorithm allows the decoupling of memory allocation from object construction.




Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2007-09-09 23:14
duffebear
Rank: 1
等 级:新手上路
威 望:2
帖 子:172
专家分:0
注 册:2007-1-30
收藏
得分:0 
都是高手,我才刚刚开始学习sgi stl源码剖析

死后定当长眠 生前何须久睡
2007-09-09 23:18
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
to yuyun:

举个ex说说

Fight  to win  or  die...
2007-09-09 23:35
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 

我知道了,unitialized_fill 里面为元素赋值的时候,是用
template<class T1,class T2>
inline void construct(T1 *p, const T2& value){
new (p) T1(value);
}
这样就不需要元素提领,只要地址合法就可以了感谢


c++/C + 汇编 = 天下无敌
2007-09-09 23:50
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 

MSDN上的例子很好了,我就采取“拿来主义”了
// memory_uninit_fill.cpp
// compile with: /EHsc
#include <memory>
#include <iostream>

using namespace std;

class Integer { // No default constructor
public:
Integer( int x ) : val( x ) {}
int get( ) { return val; }
private:
int val;
};

int main( )
{
const int N = 10;
Integer val ( 25 );
Integer* Array = ( Integer* ) malloc( N * sizeof( int ) );
uninitialized_fill( Array, Array + N, val );
int i;
cout << "The initialized Array contains: ";
for ( i = 0 ; i < N; i++ )
{
cout << Array [ i ].get( ) << " ";
}
cout << endl;
}

output:
The initialized Array contains: 25 25 25 25 25 25 25 25 25 25
/////////////////////////////////////////////////////////////////


// alg_fill.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>

int main( )
{
using namespace std;
vector <int> v1;
vector <int>::iterator Iter1;

int i;
for ( i = 0 ; i <= 9 ; i++ )
{
v1.push_back( 5 * i );
}

cout << "Vector v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")" << endl;

// Fill the last 5 positions with a value of 2
fill( v1.begin( ) + 5, v1.end( ), 2 );

cout << "Modified v1 = ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")" << endl;
}
output:
Vector v1 = ( 0 5 10 15 20 25 30 35 40 45 )
Modified v1 = ( 0 5 10 15 20 2 2 2 2 2 )


Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2007-09-09 23:54
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
明天看,睡觉了!

Fight  to win  or  die...
2007-09-10 00:00
快速回复:[讨论]关于STL的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033268 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved