C++,难以插入列表
C++, having difficulty inserting into a list
所以我做了一个我测试过的 SortedArray 类,它工作正常,但是当我尝试插入到列表中时,每当我尝试访问 SortedArray 时,我都会出现读取访问冲突。
list* aList = new list<SortedArray<T>>();
//creates an array of T* with length l and filled with NULL pointers
SortedArray<DT>* sa = new SortedArray<T>(l);
cout << endl <<sa[0] <<endl; //returns nothing because NULL
aList->push_front(*sa); //is the *sa the problem?
//should return NULL as well but throws read access violation
cout << ((*aList->begin())[0]);
我把cout<<线条放进去,这样我就能看到每一步发生了什么,但我仍然无法弄清楚问题所在。
list* aList = new list<SortedArray<T>>();
这将创建一个新的list
对象,该对象包含实际的SortedArray<T>
对象,而不是指向对象的指针。
SortedArray<DT>* sa = new SortedArray<T>(l);
这将创建一个新的SortedArray
对象,该对象(大概)保存实际的DT
对象,而不是指向DT
对象的指针。
cout << endl <<sa[0] <<endl; //returns nothing because NULL
在此语句中,sa
是一个指针,因此您正在执行指针算术而不是调用SortedArray::operator[]
(假设有一个)。 因为sa
是一个指针,所以sa[0]
与*(sa+0)
相同,所以你SortedArray
对象传递给operator<<
(除非你重载了operator<<
,否则它不会编译,将SortedArray
作为输入)。 如果你想传递SortedArray
的第一个元素,你需要取消引用指针,然后才能调用SortedArray::operator[]
:
cout << endl << (*sa)[0] <<endl;
aList->push_front(*sa); //is the *sa the problem?
此语句很好,前提是SortedArray
实现了正确的复制构造函数。push_front()
将复制您传入的SortedArray
对象,因此请确保将数组元素从一个SortedArray
正确复制到另一个。 您可能不是,这可能会导致您遇到的访问冲突。
//should return NULL as well but throws read access violation cout << ((*aList->begin())[0]);
这是C++语法越来越好的另一个领域。 您显然希望调用list
的begin()
方法来获取第一个元素的迭代器,然后取消引用该迭代器以访问SortedArray
对象,然后在该数组上调用operator[]
。 要正确执行此操作(并使代码更具可读性),您应该重新排列括号:
cout << (*(aList->begin()))[0];
- 使用列表 STL 递归进行插入排序
- 列表 iter 不取消引用 使用列表进行插入排序
- 列表的有效性在插入后开始迭代器
- 如何通过保持第一个插入的位置来对列表中插入的其余元素进行排序?
- 如何从队列插入到 2D 列表
- 创建一个函数以在给定位置将元素插入到列表中
- STL和元素插入中列表的动态分配
- 如何使用迭代器插入std ::列表
- 我们可以在穿越时插入STL列表吗?
- 从 C++ 中的两个类继承并插入到列表中
- C ado.net无法将值null插入列中
- 如何使用C 创建多列列表/向量
- 将值插入到列表中的矢量中
- 将对象从矢量插入指针列表
- 将对象插入到列表中
- C++ std::在中间和结尾之间插入的列表
- 链表-插入到列表的前面
- 将数据从迭代器插入到列表中的问题
- 采用back_inserter以使用Boost迭代器采用器从MAP插入到列表中
- 如何使用std库函数插入std::列表并保持顺序