gpt4 book ai didi

c++ - 将 vector 传递给带有指针参数的函数的问题c++

转载 作者:行者123 更新时间:2023-11-28 06:58:21 26 4
gpt4 key购买 nike

我正在做教程给出的练习,他们希望函数的参数是一个指针?语法与这些概念有点混淆,所以任何清晰度都很好。我熟悉它们的工作原理,所以没有问题。

保持转换问题“无法将 std::vector int 转换为 int*”

请让我知道问题是什么以及可能导致混淆的原因,谢谢。

代码如下:

void randArrayFill(int* theArray, int aSize)
{
for (int i = 0; i < aSize; i++)
{
*(theArray + 1) = rand() % 101;
}
}
int main()
{
int vecSize;
vector<int> simpleVec;
cin >> vecSize;
simpleVec.resize(vecSize);
randArrayFill(simpleVec, vecSize);


for (int i = 0; i < vecSize; i++)
{
cout << simpleVec[i] << endl;
}
}

最佳答案

虽然可以使用语法 &simpleVec[0] 将 vector 作为 int* 参数传递,但我不建议您这样做。因为,您传递的是 vector<> 类的内部缓冲区,绕过类控制更改其内容不是一个好主意。您应该仅将此技术用于读取而不是写入操作。因此,我建议您使用以下解决方案之一更改代码:

void randArrayFill(std::vector<int>& theArray)
{
for (int i = 0; i < theArray.size(); i++)
{
theArray[i] = rand() % 101;
}
}

通过这种方式,您可以传递对 vector 的引用并在您的函数内管理它而不会出现问题。你的主要应该是:

int main()
{
int vecSize;
vector<int> simpleVec;
cin >> vecSize;
simpleVec.resize(vecSize);
randArrayFill(simpleVec);

for (int i = 0; i < theArray.size(); i++)
{
cout << simpleVec[i] << endl;
}
}

如果您需要了解指针并且不想更改您的函数声明,您可以按如下方式更改您的 main:

int main()
{
int vecSize;
int *simpleVec;
cin >> vecSize;

simpleVec = new int[vecSize]; // allocate memory for your vector

randArrayFill(simpleVec, vecSize);


for (int i = 0; i < vecSize; i++)
{
cout << simpleVec[i] << endl;
}

delete[] simpleVec;
}

关于c++ - 将 vector 传递给带有指针参数的函数的问题c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22877459/

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