多维向量读取问题导致两个错误

问题描述 投票:0回答:1

目标:

我的目标是从五维/六维向量中检索两行数值数据,并将该数据放入二维向量中,一次一个值。

有些人可能认为这应该是一个非常简单的构建或简单的情况。

但在现实世界中,我们无法挑选我们最喜欢的数据结构。在现实世界中(课堂时间结束后),总是会出现这样的情况:您的数据结构具有多种维度和大量毛茸茸的东西。

如果我试图追踪当地动物园在新冠肺炎期间发生的所有变量(或者更可怕的事情),这是一个很容易做出的假设,他们的管理员会希望在所有动物上放置数字标记,所有动物可能的访客和外来动物/昆虫。

每种动物和人都有大量的类别。身高、体重、体型、繁殖细节、物种、亚种以及他们因 X 感染疾病的可能性。然后是访客以及不属于那里的动物和昆虫的所有数据(例如蚊子和飞翔的鸟类)开销)。

这是具有多层的大量数据,因此我们必须处理大量的维度。

大数据不仅仅与大小有关。这是关于复杂、多层数据结构的管理。

任何给定的数据结构都必须与传入的数据层及其使用方式相匹配。

展望未来,我知道我需要了解大型、复杂的数据结构方案并使其发挥作用。在准备过程中,我想在开始使用算法和数值建模技术之前提高我的肌肉记忆,以正确设计复杂的数据结构。

错误:

这两个错误都是从 MS VS2019 在系统类的 system.cpp 文件中调用的。

第一个错误:C++ 表达式必须具有类类型,但它具有类型 第二个错误:C++ 表达式必须具有对象指针类型,但它具有类型

虽然我已经采取了这两个错误并用谷歌搜索它们并查看了很多自动结果,但我没有在系统类中使用指针,这种情况也与复杂的构造函数、枚举或特殊的构造函数无关。类别类型。

同样,我的目标是从五维/六维向量中检索两行数值数据,并将该数据放入二维向量中,一次一个值。没有其他类或指针。

注意:是的,我可以将该向量的一部分复制到另一个向量中(一次一个维度),但我觉得我还没有准备好迎接这一挑战。我首先尝试学习最简单的方法。

代码:

系统类的system.h文件。

#ifndef _SYSTEM_IDEL_H
#define _SYSTEM_IDEL_H

#include <vector>

class System
{
public:
    // constructor
    System();

    void Update();

    std::vector<std::vector<int>>  get_vec_int() { return vec_output_int; }

private:

    int top = 0;
    int upper = 0;
    int middle = 0;
    int bottom = 0;

    std::vector<std::vector<int>> vec_output_int; // two dimensions

    std::vector<std::vector<std::vector<std::vector<std::vector<int>>>>> vec_value // five dimensions
    { // top
        { // upper
            { // middle
                { // bottom
                    // data_type
                    { 1, 0, 0, 9, 0 },
                    { 0, 0, 7, 0, 1 }
                },
                { // bottom
                    // data_type
                    { 1, 1, 5, 0, 0 },
                    { 0, 2, 0, 7, 3 }
                },
            }
        }
    };
};
#endif

系统类的system.cpp文件。

#include "system.h"

System::System() {}

void System::Update()
{
    for (int data_type = 0; data_type < vec_value[top][upper][middle][bottom].size(); data_type++)
    {
        vec_output_int.emplace_back();

        // First Error is being called from a misuse of .size() the error resolves itself when I remove the .size().
        // But as you might imagine, removing .size() will not solve anything becasuse '<' has to have a value that reps the length of the vector at the 'data_type' dimension.
        for (int var_data = 0; var_data < vec_value[top][upper][middle][bottom][data_type].size(); var_data++)
        {
            // Second Error is being called from a missuse of [var_data] and this is where I get even more lost.
            // While vec_value only has five dimensions, the fifth dimension appears to have another dimension within it.
            vec_output_int[data_type].push_back(vec_value[top][upper][middle][bottom][data_type][var_data]);
        }
    }
}

messy_for_loop_04.cpp 的主要内容

#include <iostream>
#include <string>
#include <vector>
#include "system.h"

std::vector<std::vector<int>> vec_output_value;

System* system;

int main()
{
    system = new System();

    vec_output_value = system->get_vec_int(); // 2 sets of values (5 each)
    
    for (int data_type = 0; data_type < vec_output_value.size(); data_type++)
    {
        for (int var_data = 0; var_data < vec_output_value[data_type].size(); var_data++)
        {
            std::cout << "\n" + vec_output_value[data_type][var_data];
        }
    }
}

编辑:

  • 更改了 system.h 文件的标头。
c++ frontend visual-studio-2019
1个回答
0
投票

解决标题中的问题

获取第五维大小:vec_value[top][upper][middle][bottom].size()。

推回值:vec_value[top][upper][middle][bottom][var_data]。

  for (int var_data = 0; var_data < vec_value[top][upper][middle][bottom].size(); var_data++)
   {
       vec_output_int[data_type].push_back(vec_value[top][upper][middle][bottom][var_data]);
   }

其他问题:

  1. system->Update();
    未在 main() 中调用:

  2. 全局指针系统与stdlib函数冲突:

    _DCRTIMP int __cdecl 系统( In_opt_z char const* _Command );.

在 main() 中声明

System* system;

  1. 您正在尝试同时打印字符串和数字。

    std::cout << "\n" + vec_output_value[data_type][var_data];

相反:

 for (int data_type = 0; data_type < vec_output_value.size(); data_type++)
 {
     for (int var_data = 0; var_data < vec_output_value[data_type].size(); var_data++)
     {
         std::cout << vec_output_value[data_type][var_data] <<" " ;
     }
     std::cout << "\n";
 }
© www.soinside.com 2019 - 2024. All rights reserved.