gpt4 book ai didi

c++ - C++ 中的 3 维 vector -传递给函数之前的部分大小定义

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:50 24 4
gpt4 key购买 nike

我想定义一个三维 vector ,其前两个维度是固定的,但我希望第三个维度由循环内调用的函数动态填充。

我不完全确定这是否被允许,但我已经尝试通过类似的方式实现它:

#define NUM 6

vector<vector<vector<double> > > foo;

foo.resize(NUM);
for(int j1=0; j1 < NUM; j1++){
foo[j1].resize(NUM);
}

while(<condition>){
fun(foo);
}

我在这里将函数 fun 声明为

void fun(vector<vector<vector<double> > >& foo){
for(int j1=0; j1<NUM; j1++){
for(int j2=j1+1; j2<NUM; j2++){
if(<condition>){
foo[j1][j2].push_back(<value>);
}
}
}
}

我最初针对 NUM 等于 5 进行了测试,一切看起来都很好,但是当我尝试将其更改为 6 时,出现了段错误。

我已经看到,即使我不尝试用 push_back 填充第 3 个维度(即我评论 push_back 行),对以 foo 作为参数的函数的简单调用也会弄乱 foo 的维度,也就是说,如果我插入一个

  cout << foo.size() << endl;

在 while 循环中,我看到 foo 的维度在第一次迭代后发生变化,从 NUM 变为随机数。

我还发现这是平台相关的,因为我在 Linux Ubuntu 上遇到了错误,但在 MacOSX 上却没有。所以我想我在做一些与内存分配相关的真正错误的事情,但我不知道到底是什么。谁能给我解释一下?

感谢您的帮助!

最佳答案

实际上,您可以使用 vector 构造函数创建固定数量大小的 3D 矩阵和所需大小的 2D 矩阵,该 vector 构造函数将元素数量和用于制作拷贝以填充的元素作为参数 vector 。这是它的样子:

#include <iostream>
#include <vector>

int main() {
const size_t NUM = 6;
std::vector< std::vector< std::vector<double> > > Matr(NUM, std::vector< std::vector<double> >(NUM, std::vector<double>()));
std::cout << "num 2D matrices - " << Matr.size() << std::endl;
for(size_t j1 = 0; j1 < Matr.size(); ++j1){
std::cout << "num rows - " << Matr[j1].size() << std::endl;
for(size_t j2 = 0; j2 < Matr[j1].size(); ++j2) {
Matr[j1][j2].push_back(0.09l);
std::cout << "num columns - " << Matr[j1][j2].size() << " ";
}
std::cout << std::endl;
}
return 0;
}

关于c++ - C++ 中的 3 维 vector -传递给函数之前的部分大小定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10684844/

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