无法访问c++中Array的元素

Unable to access elements of Array in c++

本文关键字:Array 元素 c++ 访问      更新时间:2023-10-16

我有以下情况。

class A
{
 public:
    std::vector<double *> getData()
    {
        return test;
    }
    void setData()
    {
        double * data = new double[1];
        data[0] = 1;     
        double data1[] = {1}; 
        test.push_back(data);  // Pushing first element as double *
        test.push_back(data1); // Pushing second element as double[]
    }
    private:
    std::vector<double*> test;
};
class B
{
public :
    void displaySum(A *a)
    {
        std::vector<double *> data = a->getData();
        double sum = 0.0;
        for(int i = 0; i < data.size(); i++)
        {
            printf("Data at %d : %f n", i, data[i][0]); // Getting 0 for second element
            sum = sum + data[i][0];
        }
        printf("Sum is : %f n", sum);
    }
};
int main()
{
   A *a = new A();
   a->setData();
    B *b = new B();
    b->displaySum(a);
    return 0;
}

在类A中,有成员变量std::vector test,我用double*和double[]填充vector,但在输出中,我得到了第二个元素的0值。但是在类A的setData方法A中添加了double[]={1}。所以在输出中,我应该在第二个元素得到1。请帮忙。我做错什么了吗。请给我解释一下。非常感谢。

OUTPUT ::
Data at 0 : 1.000000 // First Element
Data at 1 : 0.000000 // Second Element ->should be 1
Sum is : 1.000000    // Sum should be 2

当您推动data1时,实际上是在推动指向data1的第一个元素的指针(此时存在隐式转换)。

由于data1是函数的本地指针,因此一旦setData返回,该指针就会变为无效。

您还需要使用动态分配,或者将vector存储在vector中。

double data1[] = {1};setData()的本地,在setData退出后被销毁,向量内的内容变为悬空。

用途:

double *data1 = new double (1.0);  

再次在setData()中查看2

从代码中,我解释的是,代码应该能够添加数组和单个双数据,因此可以使用vector <double>而不是使用vector<double *>

#include <iostream>
#include <vector>
using namespace std;
class A
{
 public:
    std::vector<double> getData()
    {
        return test;
    }
    void setData()
    {
        double data = 1.00; 
        double data1[] = {1.00}; 
        test.push_back(data);  // Pushing first element as double
        // Pushing second element as double[]
        for(int i = 0; i < 1 /* Provide array size here */; i ++)
        {
            test.push_back(data1[i]); 
        }
    }
    private:
    std::vector<double> test;
};
class B
{
public :
    void displaySum(A *a)
    {
        std::vector<double> data = a->getData();
        double sum = 0.0;
        for(int i = 0; i < data.size(); i++)
        {
            printf("Data at %d : %f n", i, data[i]); // Getting 0 for second element
            sum = sum + data[i];
        }
        printf("Sum is : %f n", sum);
    }
};
int main()
{
   A *a = new A();
   a->setData();
    B *b = new B();
    b->displaySum(a);
    return 0;
}

输出:

  • 数据在0:1.000000
  • 数据为1:1.000000
  • 总额为:200000

实时演示

向量中的第二个元素是垃圾值,同时调用b->displaySum(a),因为第二个元件引用局部变量