C++ 从自定义集合(结构数组)读取数据
我是C++ 从自定义集合(结构数组)读取数据,c++,performance,pointers,collections,C++,Performance,Pointers,Collections,我是c++的初学者。所以请帮我把这个弄对 试图从集合中读取,在我尝试过的一个版本的实现中,有一些来自控制台的Bipping,另一个测试。。显示数字,因此它可能是指向字符串的指针 代码如下 DataCollection.h typedef struct _DataC { char* buffer; UINT Id; } DataC; void GetDataC( int ArrSize, DataC** DArr ); DataCollection.cpp #include "
c++
的初学者。所以请帮我把这个弄对
试图从集合中读取,在我尝试过的一个版本的实现中,有一些来自控制台的Bipping,另一个测试。。显示数字,因此它可能是指向字符串的指针
代码如下
DataCollection.h
typedef struct _DataC
{
char* buffer;
UINT Id;
} DataC;
void GetDataC( int ArrSize, DataC** DArr );
DataCollection.cpp
#include "DataCollection.h"
void GetDataC( int ArrSize, DataC** DArr )
{
int count = 0;
int strSize = 10;
*DArr = (DataC*)CoTaskMemAlloc( ArrSize * sizeof(DataC));
DataC* CurData = *DArr;
char TestS[] = "SomeText00";
for ( int count = 0; count < ArrSize; count++,CurData++ )
{
TestS[strSize-1] = count + '0';
CurData->Id = count;
CurData->buffer = (char*)malloc(sizeof(char)*strSize);
strcpy(CurData->buffer, TestS);
}
}
如何在循环中读取集合
为了
std::cout<<TestDataArr[count].buffer<<std::endl;
std::cout问题在于TestS[strize-1]=count+'0'代码>。当您传递ArrSize==100 0000
时,则在for
循环中,count+'0'
值在某一时刻超过了char
的范围,并且您得到了[0-31]
范围内的char值(不可打印字符)。至少使用
TestS[strSize-1] = '0' + count % (126 - '0');
测试的最后一个字符将在[48-126](ASCII可打印字符)范围内更改。DataC*TestDataArr
和DataC TestDataArr[]
是相同的。也就是说,当您尝试引用TestDataArr时,可以执行以下两种操作之一:
TestDataArr[index].buffer
或
因为TestDataArr
是一个指针,所以在使用它的任何成员之前,您必须遵守它,这就是索引的作用。使用第一种方法作为数组索引,指针在数组中的索引
处取消引用,然后您可以使用
访问对象的成员。第二种方法,index
将指针前进到内存位置,但不取消对指针的引用,因此必须使用->
访问其成员
因此,要在循环中打印缓冲区,可以使用:
std::cout << TestDataArr[count].buffer << std::endl;
std::cout std::cout@user2970916然后请检查GetDataC()
因为这是bipping版本…等待检查。我把
而不是->
@user2970916放在两种编译方法中。。。。。从vs控制台pc bips进行Biping。。你认识他们。。(第1版)for(int count=0;condition;count++,collection++)with cout::collection->member
-(第2版)for(int count=0;condition;count++)with cout::collection[count]。member
代码运行缓慢,非常感谢关注细节,这是一个测试的重要原因,比较<代码> char *//>代码> bSTR 速度,虽然我很快得出结论:C将数组排列为<代码> char */COD>更快,C++调试,但最终发布模式,BSTR Win。代码>BSTR
wchar\u t*
char*
。。。从最慢到最快,[char*]是最快的
TestDataArr[index].buffer
(TestDataArr + index)->buffer
std::cout << TestDataArr[count].buffer << std::endl;
std::cout << (TestDataArr + count)->buffer << std::endl;