将矢量传递到具有指针参数 C++ 的函数中的问题
troubles with vector being passed into a function with pointer parameters c++
我正在做教程给出的练习,他们希望函数上的参数是一个指针?语法与这些概念有点混淆,所以任何清晰度谁都很好。我熟悉它们的工作原理,所以没有麻烦。
保持有转换问题"无法将 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] 将向量作为 int* 参数传递,但我不建议在您的情况下这样做。因为,您传递的是 vector<> 类的内部缓冲区,绕过类控件更改其内容不是一个好主意。应仅将此技术用于读取,而不应用于写入操作。因此,我建议您在以下解决方案之一中更改代码:
void randArrayFill(std::vector<int>& theArray)
{
for (int i = 0; i < theArray.size(); i++)
{
theArray[i] = rand() % 101;
}
}
通过这种方式,您可以传递对向量的引用,并在函数中毫无问题地管理它。您的主要应该是:
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;
}
你想要的是
进入向量的内部缓冲区并传递指向此实体的指针。 若要访问内部缓冲区,请传递向量的第一个元素的地址。
randArrayFill(&simpleVec[0], vecSize);
由于向量的内部缓冲区布置在连续内存中,因此您在这里很好。 另请注意,如果 simpleVec 是一个常规数组,则相同的语法会起作用,因此,如果出于某种原因您决定使用数组而不是向量,您真的不必更改代码。
需要注意的是,您必须确保向量不为空,因为获取元素 0 的地址会导致未定义的行为。
你可以用这种方式做同样的事情。
void randArrayFill(vector<int>& theArray, int aSize)
{
for (int i = 0; i < aSize; i++)
{
theArray[i] = rand() % 101;
}
return ;
}
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;
}
return 0;
}
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 如何将enable-if与模板参数和参数包一起使用