无法访问c++中Array的元素
Unable to access elements of Array in c++
我有以下情况。
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),因为第二个元件引用局部变量
相关文章:
- 如何读/写或遍历 std::array 中的特定元素范围?
- 通过作为指向 C++ 函数的指针传递来访问 std::array 元素的正确方法是什么?
- std::初始值设定项列表来自现有的 std::array,而不枚举每个元素
- 如何有条件地将元素添加到 std::array - C++11
- 用一个额外的元素扩展 std::array 的每个 std::元组
- 创建 2D 数组类:如何访问 2D 数组类(如 array[x][y))中的元素
- 使用声明中的元素类型隐式初始化 std::array
- 访问双 std::array 的元素
- 键入 trait 以获取 std::array 或 C 样式数组的元素类型
- 在 C++ 中访问 std::array<std::array> 元素
- std::array :通过智能指针访问元素的成员
- C++17 有效地将参数包参数与 std::array 元素相乘
- 如何为所有“ std :: array”的工厂结构进行部分专业化,该结构超过4`元素
- 2D-Array 会在存储新元素时删除元素本身
- 使用默认成员初始值设定项对 std::array 的元素进行零初始化
- 如何知道您输入到std::array中的最后一个元素是什么?
- 不能直接分配元素 std::array,它说没有运算符"="匹配
- 向量是否比std::array多使用一个解引用来访问元素
- std::set for array 中的每个元素
- 无法访问c++中Array的元素