[英]Adding ints* to a pointer array
我在處理細微差別的指針時遇到很多麻煩。 我正在嘗試將對整數的引用添加到int指針數組中,但我似乎不太正確。 這是我的代碼:
int main()
{
ATree<int> testTree;
int nums[12] = {5,4,3,7,6,1,2,12,15,9,8,11};
int *ptr;
int num, a;
for (int i = 0; i < 5; ++i)
{
a = nums[i];
*ptr = a;
testTree.add(nums[i]);
}
cout << "Enter a value to search for" << endl;
cin >> num;
cout << testTree.search(num) << endl;
return 0;
}
樹
template <typename Item>
class ATree
{
public:
ATree();
void add(Item);
void add_helper(int, Item);
int search(Item);
int search_helper(int, Item);
int get_size();
private:
int size;
Item* tree[40];
};
#include "ATree.hpp"
ATree.hpp
template <typename Item>
ATree<Item>::ATree()
{
for (int i = 0; i < 40; ++i)
{ tree[i] = nullptr }
size = 0;
}
template <typename Item>
void ATree<Item>::add(Item obj)
{
int n = 1;
if ((tree[1]) == nullptr)
{
tree[1] = &obj;
}
else
{
add_helper(n, obj);
}
}
template <typename Item>
void ATree<Item>::add_helper(int n, Item obj)
{
if (tree[n] == nullptr)
{
tree[n] = &obj;
}
else if (&obj > tree[n])
{
n = 2*n+1;
add_helper(n, obj);
}
else
{
n = 2*n;
add_helper(n, obj);
}
}
template <typename Item>
int ATree<Item>::search(Item obj)
{
int n = 1;
if (&obj == tree[1])
{ return 1; }
else
{ return search_helper(n, obj);}
}
template <typename Item>
int ATree<Item>::search_helper(int n, Item obj)
{
if (&obj == tree[n])
{ return n; }
else if (&obj > tree[n])
{
n = 2*n+1;
return search_helper(n, obj);
}
else
{
n = 2*n;
return search_helper(n, obj);
}
}
template <typename Item>
int ATree<Item>::get_size()
{return size;}
從概念上講,我發現指針相對簡單,但是一旦它們開始在類或數組之間傳遞(看來數組對它們的處理方式有所不同?),對我而言,它開始變得非常違反直覺。
基本上存儲對象,而不是指針:
Item tree[40];
然后在比較中,比較對象,而不是它們的指針:
template <typename Item>
void ATree<Item>::add(Item obj)
{
int n = 1;
if ((tree[1]) == nullptr) // USe a counter here instead, to know how many objects are stored
{
tree[1] = obj;
}
else
{
add_helper(n, obj);
}
}
template <typename Item>
void ATree<Item>::add_helper(int n, Item obj)
{
if (tree[n] == nullptr)
{
tree[n] = obj;
}
else if (obj > tree[n])
{
n = 2*n+1;
add_helper(n, obj);
}
else
{
n = 2*n;
add_helper(n, obj);
}
}
template <typename Item>
int ATree<Item>::search(Item obj)
{
int n = 1;
if (obj == tree[1])
{ return 1; }
else
{ return search_helper(n, obj);}
}
}
template <typename Item>
int ATree<Item>::search_helper(int n, Item obj)
{
if (obj == tree[n])
{ return n; }
else if (&obj > tree[n])
{
n = 2*n+1;
return search_helper(n, obj);
}
else
{
n = 2*n;
return search_helper(n, obj);
}
}
此代碼未經測試,因此無法正常工作,因為您必須添加一個計數器來檢查您實際存儲了多少個元素(我建議使用std::vector<>
),並且也沒有邊界檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.