使用赋值运算符对队列进行深度复制
Deep copy of a queue using assignment operator
我在使用赋值运算符时遇到了指针问题,它不会生成新的queu,而是新数组指向旧数组。因此,当我在新队列中删除时,旧队列中的值会发生变化。
首先,我可以看到,由于某种未知的原因,我的复制构造函数没有在main中被调用,问题可能与此有关。
我的一些主要代码用来说明这个问题:
aQueue.enqueue(10);
aQueue.enqueue(20);
Queue<int> cQueue = aQueue;
cout << "aQueue: "; aQueue.printQeueue(2, 0);
cout << "cQueue: "; cQueue.printQeueue(3, 0);
cQueue.dequeue();
cout << "aQueue: "; aQueue.printQeueue(4, 1);
cout << "cQueue: "; cQueue.printQeueue(5, 1);
system("pause 4");
这就是问题的开始,如果我用10和20将aQueue排队,然后将cQueue分配给aQueue,如果我打印aQueue,结果是:10 20。在将cQueue出列并打印aQueue之后,结果为:-179101023。如果我打印cQueue,结果是:20,应该是这样。
输出:https://i.stack.imgur.com/0xRwC.jpg
以下是直接或间接使用的函数:
template <typename T>
T Queue<T>::dequeue(){
T temp = front();
Node *old = fronten;
fronten = fronten->next;
delete old;
return temp;
}
template <typename T>
Queue<T>::Queue(const T &rhs){
Node *tempfront = rhs.fronten;
while (tempfront.fronten!=rhs.back){
enqueue(tempfront);
tempfront = tempfront->next;
}
}
template <typename T>
void Queue<T>::enqueue(const T& item){
if (isEmpty()){
back = fronten = new Node(item);
}
else
back = back->next = new Node(item);
}
Node(const T &theElement, Node *n = nullptr): element(theElement), next(n) {};
您目前没有Queue类的复制构造函数(或者您没有显示它)。你的
template <typename T> Queue<T>::Queue(const T &rhs)
是它存储的类型中的Queue的构造函数。你需要这样的东西:
template <class T>
class Queue
{
public:
Queue( const Queue &); // copy ctor
Queue& operator=( const Queue& q); // assignment operator
//...
};
相关文章:
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- C++尝试深度复制唯一指针时出现内存访问冲突
- 在 c++ 中使用深度复制的运算符重载
- 如何深度复制链表对象指针
- 我有两棵二叉树.我想在不更改输入树的情况下深度复制两个二叉树的结果
- 如何将结构深度复制到向量的每个元素
- 我需要做一个深度复制,我是否正确使用了我的复制构造函数?
- 是否可以在不显式迭代每个元素的情况下深度复制指针容器?
- 如何深度复制unique_ptr向量
- 二叉搜索树 深度复制和取消引用
- 链表的这个别名运算符是否会产生深度复制
- 有没有一种 stl 方法来执行指针向量的深度复制
- cv::P oint3f 赋值运算符是否执行"深度"复制?
- Qt:通过深度复制访问列表中的数据结构是否应该比通过指针访问它慢得多
- 深度复制包含引用成员(C++)的结构
- 如何将“char *”深度复制到std::stringstream
- 如何在双向链表上执行深度复制
- 在复制构造函数中执行深度复制
- 深度复制cv::垫子替代品,哪个更好?
- 在 C/C++ 中使用 ProtoBuf 进行深度复制