我创建了一个数组:
CString* pstrArray = new CString[nMySize];
现在我该如何将它传递给要填充的函数?实际参数是什么?
void FillThisArray(what goes here?)
{
}
答案 0 :(得分:4)
您应该使用容器类:CStringArray
void FillThisArray( CStringArray & rMyStrings )
如果你不想要这个(我没有看到任何可能的原因,但无论如何):
void FillThisArray(CString* strings, size_t num)
{
// example
for( size_t s=0; s<num; s++ )
{
strings[s].Format( _T("This is the %d. string"), s+1 );
}
}
答案 1 :(得分:4)
CString * pstrArray = NULL; pstrArray = new CString [nMySize];
为简单起见:
CString* pstrArray = new CString[nMySize];
现在我怎样才能将它传递给一个要填充的功能?什么是实际参数?
void FillThisArray(????){}
最明显的界面是:
void FillThisArray(CString* pstrArray, size_t n)
退后一步:
CString
的所有内存都将由该单个新语句分配std::vector<std::string>
std::vector
因为:
push_back()
,在此类使用情况下,如果您没有任何特殊工作,可能会超出初始规模vector
时,您可以主动为nMySize字符串保留空间和/或创建它们std::string
因为:
答案 2 :(得分:3)
如果有一个很好的理由不能使用标准容器类,请考虑采用迭代器式方法。这样可以避免担心函数中的数组有多大:
void FillThisArray(CString* begin, CString* end)
{
for (CString* iter = begin; iter != end; ++iter)
{
*iter = "Some text";
}
}
int main()
{
CString* pstrArray = new CString[nMySize];
FillThisArray(&pstrArray[0], &pstrArray[nMySize]);
for (int i = 0; i < nMySize; ++i)
{
assert(pstrArray[i] == "Some_text");
}
delete[] pstrArray;
}
你甚至可以模拟你的函数,使它不依赖于pstrArray的(可疑的)实现:
template <typename T>
void FillThisArray(T begin, T end)
{
for (T iter = begin; iter != end; ++iter)
{
*iter = "Some text";
}
}
int main()
{
{
CString* pstrArray = new CString[nMySize];
FillThisArray(&pstrArray[0], &pstrArray[nMySize]);
for (int i = 0; i < nMySize; ++i)
{
assert(pstrArray[i] == "Some text");
}
delete[] pstrArray;
}
{
std::vector<std::string> better(nMySize);
FillThisArray(better.begin(), better.end());
for (int i = 0; i < nMySize; ++i)
{
assert(better[i] == "Some text");
}
}
}
答案 3 :(得分:1)
您需要将指针传递给第一个元素以及可用元素的数量:
void FillThisArray(CString* strings, size_t num)
{
}
答案 4 :(得分:0)
您必须将dymanically allocate数组作为指向其第一个元素的指针传递。有两种语法,两者都是等价的:
void FillThisArray(CString* strArray)
{
}
或
void FillThisArray(CString strArray[])
{
}
您可以将strArray参数用作函数内的数组。请注意,指针不包含有关数组实际大小的信息,因此如果大小不是全局可用的,则应将大小作为第二个参数传递。 hth
答案 5 :(得分:-1)
void FillThisArray(CString* pstrArray)
你不能这样做吗?