C++ 将std::vector传递给C+中的函数时的内存分配+;

C++ 将std::vector传递给C+中的函数时的内存分配+;,c++,pointers,parameter-passing,dynamic-memory-allocation,C++,Pointers,Parameter Passing,Dynamic Memory Allocation,考虑以下简单示例: #包括 void func(标准::向量*输出){ 标准:向量温度(10000); /*…在这里工作并用有用的值填充temp*/ //现在将结果发送到main *输出=温度; } 内部主(空){ std::vec; //func将在vec中输入有用的值 func(和vec); for(size\u t i=0;iresize(10000)?)。因此,在for循环中调用func后,我希望在使用vec时会出现内存错误,但代码似乎工作正常 你能解释一下这个行为吗?还有,你是这样写代

考虑以下简单示例:

#包括
void func(标准::向量*输出){
标准:向量温度(10000);
/*…在这里工作并用有用的值填充temp*/
//现在将结果发送到main
*输出=温度;
}
内部主(空){
std::vec;
//func将在vec中输入有用的值
func(和vec);
for(size\u t i=0;iresize(10000)
?)。因此,在for循环中调用
func
后,我希望在使用
vec
时会出现内存错误,但代码似乎工作正常

你能解释一下这个行为吗?还有,你是这样写代码的吗(例如,当你需要一个函数来填充一个向量时,也许每次都会有不同数量的值,尽管这里的值是
10000
)?(顺便说一句,我不想使用
return

谢谢!

来自for
std::vector

向量的存储是自动处理的,可以扩展和保存 根据需要签订合同

正是这种
std::vector
的特性使得它非常易于使用

在代码中

*output = temp;

此行将
temp
向量复制到
output
,即调用。您不必考虑如何在内部执行此操作,但您可以假设在
output
指向的向量包含
temp
的副本之后,您可能应该通过引用而不是指针传递向量。您可以因为vector的赋值运算符就是这样设计的,所以可以不受影响。直观简单的对象经常被使用。vector经常被使用。谢谢你们两位。@drescherjm所以在我的
func
中的实际代码中,调用了一些其他函数来生成(大)向量(类似于
temp
).由于这是一个局部变量(在func内部),我不确定通过引用传递是否有效?请注意,使用
运算符[]
读取越界向量是未定义的行为,并且不保证以任何方式发生崩溃或错误。如果要确定向量的大小,只需查询其
.size()
并根据您的期望直接检查它。或者,您可以使用
.at(i)
,它在
i
超出范围时抛出异常。谢谢。因此,在我的
func
中的实际代码中,调用了其他一些函数来生成(大)向量(例如
temp
)。这是“正确的”吗将代码> TEMP/<代码>的值传递给主的方法(即,通过指针?),C++的教科书应该对函数之间传递对象的不同方式进行长时间的讨论:使用指针、引用和其他方法。没有“正确”。用C++做某事的方法在所有情况下都是普遍适用的。为了对给定的情况做出适当的方法,必须充分理解各种选项之间的区别。@ SAMVALSAVIKK感谢SAM.所以这里是我的具体情况:我有一个函数,比如这将调用另一个函数(如上例中的
func
)来获取
int
的(大)向量。但是
func
本身调用第三个函数,该函数在
func
中返回该向量。现在我想知道如何将该向量从
func
传递回main?(不使用
return
,因为它已经用于其他用途)对于单个解决方案来说,这仍然太宽泛、太笼统,无法识别。正如我所写的:“为了就特定情况下的适当方法作出明智的决定,有必要充分了解各种选择之间的区别“,包括指针和引用。而且没有任何法律规定函数只能返回一个值。这就是
std::tuple
的作用。这并不意味着这将是最佳解决方案,它只是显示了各种可用选项。