征集方案(测试一下你的功底如何!)(200分)

  • 主题发起人 主题发起人 D_LOVER
  • 开始时间 开始时间
D

D_LOVER

Unregistered / Unconfirmed
GUEST, unregistred user!
将下面的C++代码翻译成Delphi代码!
(主要是数据类型的对比,C++中的容器类和Delphi中的。。。。。??)

class FStream
{
private:
struct LargeData
{
unsigned long position;
const unsigned char* data;
unsigned long size;
};

std::vector<unsigned char> stream;

unsigned long streamPos;
unsigned long bytePos;
unsigned char currentByte;
std::list<LargeData> outDataList;
public:

FStream();
unsigned long Size();
unsigned char* Memory() { return &amp;stream[0]; }
void WriteBits( unsigned long data, unsigned long size );
void WriteLargeData( const unsigned long* data, unsigned long size );
};
 
欢迎大家就此展开讨论!
 
这类问题怎么大家都不愿意回答,是太简单吗?还是。。。。。
 
不是简单, 是
std::vector<unsigned char> stream

std::list<LargeData> outDataList
没法直接翻译
 
tseug, 提供个思路也是好的,能否找个好的解决办法
 
unsigned long ——》 DWORD
unsigned char* ——》PCHAR
unsigned char ——》BYTE

std::vector<unsigned char> stream
——不清楚
std::list<LargeData> outDataList ——》TLIST 装载LargeData结构的指针?

 
type
PByte = ^Byte;
PLargeData =^TLargeData;
TLargeData = record
position : Cardinal;
data : PByte;
size : Cardinal;
end;

type
FStream = class
private
LargeData : TLargeData;

//std::vector<unsigned char> stream;

streamPos : Cardinal;
bytePos : Cardinal;
currentByte: Byte;
// std::list<LargeData> outDataList;

public
constructor Create
//FStream();
function Size: Cardinal
//unsigned long Size();
function Memory: PByte
//unsigned char* Memory() { return &amp;stream[0]; }
procedure WriteBits(data: Cardinal
Size: Cardinal)
//void WriteBits( unsigned long data, unsigned long size );
procedure WriteLargeData(const data : PLargeData
size: Cardinal)
//void WriteLargeData( const unsigned long* data, unsigned long size );
end;


大概是这样的.//
 
呵呵,老兄真是办事谨慎呀,不多写的是一个字都不多写,你没写的正是我这个问题的本
意所在,能否在delphi中找到或者构造象C++里容器类Vector,list那么方便的结构
 
能解释一下cpp中vector, list的含义吗? (不懂啊...), 不过从“容器”想到了array of, "容器类"想到了TList ....
 
Delphi中不支持STL中的范型编程,考虑使用TCollection和TList来替换吧!
 
Delphi中的动态数组不太灵活,内存分配不如C++中的Vector类灵活
 
vector,list类涉及到泛型编程,有兴趣的可以下面去查查资料
 
Adnil兄,TCollection对于类对象的存放是常见的,不知对于象字节这样的数据操作起来
是否好使,因为这样的数据量太大
 
>>Delphi中的动态数组不太灵活,
想偷懒的说法。 delphi动态数组管理起来挺方便的, 添加和删除不过是用setlength扩大或缩小这个数组的大小, 并在SetLength前或后用move移动一下部分数据而已。 也就3-4行代码。
 
摆脱,有点难度行不行
 
每次增加内容时都得改变动态数组的长度,也就是每次都调用SetLength,每次要调用move
这样的做法效率会高吗
 
要知道我操作的是字节这样的小数据,非常多的
 
呵呵, 谁规定了必须每次改动动态数组后就要调用SetLength呀?
好象没有那条法律规定第一次添加数据时我不能分配1500项的空间而只用其中一项吧? 这样至少后面1499次添加数据时我不必再分配内存了。
这样做的效率当然会高多了。 实际上TList就是这样管理它内部的数据项的。我相信c++中的Vector也是这样管理的, 只不过对外界透明而已。
 
后退
顶部