在循环中使用返回向量的函数
use function inside of loop which returns vector
我有一个函数myfun
它将返回一个向量。
vector<double> myfun(const size_t k, const size_t i){
vector<double> v(k);
// do some computation with remaining arguments
return v;
}
然后,我将在循环中使用它来更新v
并使用v
来获得一些结果。
int main(){
size_t N = 100; // iteration size
size_t n = 10; // size of v
vector<double> result(N);
vector<double> v(n);
for(size_t i = 0; i<N; i++){
v = myfun(n,i); // compute for each iteration
result[i] = compute_some_value(v);
}
}
所以,我的问题是:
- 每次调用
v
时,它实际上是否在myfun
内部分配? - 如果是这样,旧
v
会怎样? - 另外,仅使用像
void myfun(some_args, vector<double> &v)
这样的地址作为输出参数v
更好吗?
每次调用 myfun 时,v 实际上都会在 myfun 内部分配吗?
是的
如果是这样,旧v会怎样?
它被覆盖。
另外,对于输出参数 v,仅使用像 void myfun(some_args, vector &v) 这样的地址是否更好?
是的,最好根据您的操作通过引用传递矢量。
你可以这样做
double compute_some_value(vector<double> & v, const size_t i) {
v.clear(); // use if required
// do some computation with remaining arguments and return
}
int main() {
size_t N = 100; // iteration size
size_t n = 10; // size of v
vector<double> result(N), v(n);
for (size_t i = 0; i < N; i++) {
result[i] = compute_some_value(v, i);
}
}
每次调用 myfun 时,v 实际上都会在 myfun 内部分配吗?
是的
如果是这样,旧v会怎样?
当 v 超出范围时,将调用析构函数,对象将析构。这就是为什么你实际上不必显式调用类的析构函数。
另外,是否最好只使用像void myfun(some_args这样的地址, 向量 &v) 用于输出参数 v?
这实际上取决于您的用例。如果它涉及内存问题,最好传递引用。
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用向量的template_back函数
- 如何删除除 ArduinoSTL 的向量函数之外的所有函数
- 在使用标准向量函数时引发'std::bad_alloc'实例后调用的终止
- 我可以为向量函数返回 NULL<double> 吗?
- 将多个向量(函数结果)组合到一个使用模板中
- 如何在 c++ 中制作通用字符串到向量函数
- 为什么简单的C++向量函数会产生越界的下标
- 为什么我的向量函数的返回值总是 1
- 模板化向量函数参数的std::is_base_of
- 我的程序没有运行,多维向量函数
- C 如何使2D向量函数
- 如何从 v8 返回向量<T> C++ 函数
- C++ 如何使此向量函数接受任何分隔符
- 我想返回一个向量函数,<Competition>但被告知竞争是未声明的,并且我正在使用未定义的类'std::vector'
- C++:如何在类中使用向量函数
- 自己的"Insert"方法(向量)函数模板
- c++中的内存泄漏:循环中的向量函数
- 如何添加一个元素到一个向量函数
- 向量函数'at'