gpt4 book ai didi

c++ - 类更改其他类的数据成员

转载 作者:太空狗 更新时间:2023-10-29 20:58:22 25 4
gpt4 key购买 nike

我的 C++ 程序中有两个类 MaxsegtreeMinsegtree

Maxsegtree 有 2 个私有(private)数据成员 PQ,在实例创建时动态分配内存。

Minsegtree 有两个类似的数据成员 AB

当我调用类 Minsegtree 的成员函数时,Maxsegtree A 的数据成员的值正在发生变化。

This is the ideone link to the program.

#include <iostream>

using namespace std;

class Maxsegtree
{
int* P;
int* Q;
public:
Maxsegtree(int N)
{
P = new int[N];
Q = new int[2 * N];
}

~Maxsegtree()
{
delete[] P;
delete[] Q;
}

int getP(int i)
{
return P[i];
}

void setP(int i, int x)
{
P[i] = x;
}

void build_tree(int node, int l, int r)
{
if (l == r)
Q[node] = l;
else
{
build_tree(node * 2, l, (l + r) / 2);
build_tree(node * 2 + 1, (l + r) / 2 + 1, r);
if (P[Q[2 * node]] > P[Q[2 * node + 1]])
Q[node] = Q[2 * node];
else
Q[node] = Q[2 * node + 1];
}
}
};

class Minsegtree
{
int* A;
int* B;
public:
Minsegtree(int N)
{
A = new int[N];
B = new int[2 * N];
}

~Minsegtree()
{
delete[] A;
delete[] B;
}

int getA(int i)
{
return A[i];
}

void setA(int i, int x)
{
A[i] = x;
}

void build_mintree(int node, int l, int r)
{
if (l == r)
B[node] = l;
else
{
build_mintree(node * 2, l, (l + r) / 2);
build_mintree(node * 2 + 1, (l + r) / 2 + 1, r);
if (A[B[2 * node]] <= A[B[2 * node + 1]])
B[node] = B[2 * node];
else
B[node] = B[2 * node + 1];
}
}
};

int main()
{
int n;
int x;
cin >> n;
Minsegtree mint(n);
Maxsegtree maxt(n);
for (int i = 0; i < n; i++)
{
cin >> x;
mint.setA(i, x);
maxt.setP(i, x);
}
cout << "Before function is called" << endl;
for (int i = 0; i < n; i++)
cout << maxt.getP(i) << " ";
cout << endl;
mint.build_mintree(1, 0, n - 1);
cout << "After function is called" << endl;
for (int i = 0; i < n; i++)
cout << maxt.getP(i) << " ";
cout << endl;
return 0;
}

有人可以告诉我我做错了什么吗?

最佳答案

很可能您访问的数组超出了限制。

通过使用 std::vector 而不是原始指针并使用 .at() 而不是 [] 来添加检查以进行访问。代码如下:

B[node] = l;

例如变成

B.at(node) = l;

这样,如果您在限制之外访问,将抛出 std::out_of_range 异常。

使用 vector 而不是手动分配的数组也会注意释放和正确实现复制构造函数和赋值,以防您最终使用它们。

关于c++ - 类更改其他类的数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27808265/

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