gpt4 book ai didi

c++ - 在 C++ 中复制列信息

转载 作者:行者123 更新时间:2023-11-28 07:00:40 25 4
gpt4 key购买 nike

我必须将列信息从数据库复制到结构,问题是它需要 5000 多次迭代并且非常慢。有没有更好的办法?

使用的代码在.h文件中:

struct sFieldDef
{
CString m_strQualifier;
CString m_strOwner;
CString m_strTableName;
CString m_strColumnName;
int m_nDataType;
CString m_strTypeName;
long m_lPrecision;
long m_lLength;
int m_nScale;
int m_nRadix;
int m_nNullable;
};

.cpp文件中使用的代码:

sFieldDef sTempField;
CColumns rsColumns(m_pDatabase);
rsColumns.Open(CRecordset::snapshot);

while( !rsColumns.IsEOF() )
{
sTempField.m_strQualifier=rsColumns.m_strQualifier;
sTempField.m_strOwner=rsColumns.m_strOwner;
sTempField.m_strTableName=rsColumns.m_strTableName;
sTempField.m_strColumnName=rsColumns.m_strColumnName;
sTempField.m_nDataType=rsColumns.m_nDataType;
sTempField.m_strTypeName=rsColumns.m_strTypeName;
sTempField.m_lPrecision=rsColumns.m_lPrecision;
sTempField.m_lLength=rsColumns.m_lLength;
sTempField.m_nScale=rsColumns.m_nScale;
sTempField.m_nRadix=rsColumns.m_nRadix;
sTempField.m_nNullable=rsColumns.m_nNullable;
pArrFiels->Add(sTempField);
rsColumns.MoveNext();
}

最佳答案

您似乎将所有内容复制并存储在结构数组中,其中每个结构都具有相同的成员和相应的记录。通常我们通过迭代器来使用数组。那么为什么不为您的记录集提供一个迭代器并避免完全复制呢?你可以大致这样开始:

template <typename RS>
class rs_iterator
{
RS& rs;
public:
rs_iterator(RS& rs) : rs{rs} { }
const RS& operator*() { return rs; }
rs_iterator& operator++() { return rs.MoveNext(), *this; }
// ...
}

因此,您不仅可以为类似数组的数据源(如记录集)提供方便且标准的接口(interface),还可以直接在需要双向迭代器的类似 STL 的算法中使用它。

如果您的 CRecordset 支持随机访问,那么您的迭代器也很容易支持。否则,随机访问提供本身就是复制的一个很好的理由(例如,对列进行排序)。

关于c++ - 在 C++ 中复制列信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22532299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com