c++ - 使用指针 vector 循环其他 vector

标签 c++ pointers vector

我创建了一个类,其中包括 vector 。我想循环这些 vector ,因此在我的类构造函数中创建了指向这些 vector 的指针 vector 。编译没问题,但运行不正常。调试似乎表明 vector.size() 有问题,尽管它出现在 cout 行上。我已经缩短了类和代码以使其更易于阅读,但我仍然收到错误。

这是类定义:

#ifndef DEFINITION_CLASSES
#define DEFINITION_CLASSES

#include <string>
#include <vector>
#include <stdarg.h>

using namespace std;

class objLoc {
public:
    vector<string> branches;
    void setBranches(int amount, ...);
};
void objLoc::setBranches(int amount, ...) {
    char *value;
    va_list points;

    branches.clear();
    va_start(points, amount);
    for (int i = 0; i < amount; ++i) {
        value = va_arg(points, char *);
        branches.push_back(string(value));
    }
    va_end(points);
}

class Spline3d {
public:
    vector<double> x, y, z;
    objLoc location;
    void setx(int amount, ...);
};
void Spline3d::setx(int amount, ...) {
    double value;
    va_list points;

    x.clear();
    va_start(points, amount);
    for (int i = 0; i < amount; ++i) {
        value = va_arg(points, double);
        x.push_back(value);
    }
    va_end(points);
}

class SuspensionGeneralProperties {
public:
    Spline3d left_x_vs_z, left_y_vs_z, right_x_vs_z, right_y_vs_z;
};

class Suspension {
public:
    Suspension();
    SuspensionGeneralProperties suspProp;
    vector<Spline3d *> variable_spline3d;
};
Suspension::Suspension() {
    Spline3d * temp_spline3d[] = { &suspProp.left_x_vs_z, &suspProp.left_y_vs_z,
            &suspProp.right_x_vs_z, &suspProp.right_y_vs_z };
    variable_spline3d.assign(temp_spline3d, temp_spline3d + 5);
}

#endif

这是源文件:

#include <iostream>
#include <string>
#include <vector>
#include <stdarg.h>
#include "class_def.h"

using namespace std;

void loop(Suspension* susp) {
    Spline3d* spline;

    for (size_t i = 0; i < susp->variable_spline3d.size(); i++) {
        spline = susp->variable_spline3d[i];
        cout << "Branch: " << spline->location.branches[0] << endl; //This is where the error seems to be
    }
}

int main() {
    int i;
    Suspension suspFront;

    suspFront.suspProp.left_x_vs_z.setx(11, -100.0, -80.0, -60.0, -40.0, -20.0,
            0.0, 20.0, 40.0, 60.0, 80.0, 100.0);
    suspFront.suspProp.left_x_vs_z.location.setBranches(3, "Subsystem",
            "SuspensionGeneralProperties", "Spline3d");
    suspFront.suspProp.left_y_vs_z.setx(11, -100.0, -80.0, -60.0, -40.0, -20.0,
            0.0, 20.0, 40.0, 60.0, 80.0, 100.0);
    suspFront.suspProp.left_y_vs_z.location.setBranches(3, "Subsystem",
            "SuspensionGeneralProperties", "Spline3d");
    suspFront.suspProp.right_x_vs_z.setx(11, -100.0, -80.0, -60.0, -40.0, -20.0,
            0.0, 20.0, 40.0, 60.0, 80.0, 100.0);
    suspFront.suspProp.right_x_vs_z.location.setBranches(3, "Subsystem",
            "SuspensionGeneralProperties", "Spline3d");
    suspFront.suspProp.right_y_vs_z.setx(11, -100.0, -80.0, -60.0, -40.0, -20.0,
            0.0, 20.0, 40.0, 60.0, 80.0, 100.0);
    suspFront.suspProp.right_y_vs_z.location.setBranches(3, "Subsystem",
            "SuspensionGeneralProperties", "Spline3d");

    loop(&suspFront);

    cin >> i;
    return i;
}

如果有任何线索可以帮助我解决这个问题,我将非常感激。

最佳答案

variable_spline3d.assign(temp_spline3d, temp_spline3d + 5);

您告诉assign()复制五个Spline3D*指针,但其中只有四个指针你的数组,所以第五个指针是垃圾。

关于c++ - 使用指针 vector 循环其他 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13848741/

相关文章:

c - C中的结构查找大于某个变量的元素

matlab - 左矩阵除以向量

c++ - Vector 在退出写入它的函数后丢失数据

r - R 中的向量与数据框

c++ - "Request for member which is of non-class type", 赋值语句不正确?

c++ - read_some/write_some 和接收/发送之间的区别?

c++ - Opencv 图像包装器 cpp

c++ - 在构造函数中填充类指针 vector

c++ - 在运行时询问变体中的替代项是否满足某个概念

C中指针和整数的比较