无法将内存地址转换为值
Can't convert memory address to value
感谢您访问我的问题!目前,当我运行此代码(c++ 中 Set 数据结构的实现(时,将打印集合中每个元素的内存地址,而不是集中的值。为了帮助调试,以下是我的代码:
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cassert>
#define PB push_back
typedef std::vector<int> vint;
class SetBase
{
public:
SetBase() {}
~SetBase() {}
void insert(int x)
{
if (!this->isInSet(x))
{
this->set.PB(x);
}
}
int size()
{
return this->set.size();
}
bool empty()
{
return this->size() == 0;
}
int operator[](int index)
{
if (index >= 0 && index < this->size())
{
return this->set[index];
}
else
{
return -1;
}
}
bool find(int target)
{
sort(this->set.begin(), this->set.end());
int low = 0, high = this->size();
while (low <= high)
{
long long mid = low + (high - low) / 2;
long long guess = this->set[mid];
if (guess == target)
return true;
else if (guess < target)
low = mid + 1;
else
high = mid - 1;
}
return false;
}
int count(int target)
{
int counter = 0;
for (int i = 0; i < this->set.size(); i++)
{
if (this->set[i] == target)
counter++;
}
return counter;
}
bool operator=(SetBase &other)
{
if (other.size() != this->size())
return false;
for (int i = 0; i < other.size(); i++)
{
if (other[i] != this->set[i])
return false;
}
return true;
}
private:
vint set;
bool isInSet(int target)
{
for (int i = 0; i < this->size(); i++)
{
if (set[i] == target)
{
return true;
}
}
return false;
}
};
class Set : public SetBase
{
public:
void set_union(Set *set1, Set *set2, Set &back_insertor)
{
for (int i = 0; i < set1->size(); i++)
{
if (this->isInSet(back_insertor, i))
{
back_insertor.insert(i);
}
}
}
void set_difference(Set set1, Set set2, Set &back_insertor)
{
// set_difference = set1 - set2
}
void set_intersection(Set set1, Set set2, Set &back_insertor)
{
// set_difference = set1 U set2
for (int i = 0; i < set1.size(); i++)
{
for (int j = 0; j < set2.size(); j++)
{
if (set1[i] == set2[j])
{
back_insertor.insert(set1[i]);
}
}
}
}
void printSet(Set *in)
{
for (int i = 0; i < in->size(); i++)
{
std::cout << &in[i] << "n";
}
}
private:
bool isInSet(SetBase set1, int target)
{
for (int i = 0; i < set1.size(); i++)
{
if (target == set1[i])
{
return true;
}
}
return false;
}
};
int main()
{
Set *set_1 = new Set();
Set *set_2 = new Set();
Set *back = new Set();
for (int i = 1; i <= 10; i++)
set_1->insert(i);
for (int i = 1; i <= 10; i++)
set_2->insert(i);
set_2->insert(11);
set_1->set_union(set_1, set_2, *back);
set_1->printSet(set_1);
delete set_1;
delete set_2;
delete back;
}
运行set_1->printSet(set_1);
行时,我得到的是:
0x7fb498c05a20
0x7fb498c05a38
0x7fb498c05a50
0x7fb498c05a68
0x7fb498c05a80
0x7fb498c05a98
0x7fb498c05ab0
0x7fb498c05ac8
0x7fb498c05ae0
0x7fb498c05af8
即使这有效,我也想打印出值(整数(。任何帮助将不胜感激!谢谢!:)
在printSet()
中,您可以使用&in[i]
打印每个元素。
&
运算符返回所引用对象的地址。因此,您获取的不是值,而是其地址。 您应该删除它,例如:
void printSet(Set *in)
{
for (int i = 0; i < in->size(); i++)
{
std::cout << (*in)[i] << "n";
}
}
相关文章:
- 已转换对象的地址
- 右值引用转换后的地址更改
- 无法将内存地址转换为值
- C++ 将地址保存为字符串的向量转换为新的向量
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 将Wiimote MAC地址转换为PIN码,从C++转换为Python或Javascript
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 在带有 (void*) 强制转换的字符串中打印字符的内存地址
- 将函数的地址转换为UINTPTR_T给我不正确的结果
- 将字节数组转换为地址
- 为什么类型转换对象不会更改其地址?有关对象类型的信息存储在哪里?
- 如何将C++ ulong 4 字节 IP 地址正确转换为 C# 类型
- 从十六进制转换为LPCVoid,切断了一半地址
- 无法将主机名"localhost"转换为地址:未知服务器错误
- 地址清理器在静态强制转换无效指针时报告错误
- C++ Arduino:向下转换后,子字段不引用原始地址
- 将对象强制转换为 dlsym 返回的地址
- 获取字符数组地址,然后转换为指针字符
- 如何将字符串转换为地址
- (C++内存编辑)将"THREADSTACK0"转换为地址