- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写这段代码是为了自学如何正确处理文件和字符串。我已经成功地完成了读取和写入文件的部分,但在删除列表中的所有元素时堆积了一段时间。
问题是,从列表中删除所有元素后,我尝试使用函数 printAll,它没有停止,我不明白问题出在哪里。也许你们中的一些人可以让我看到这个错误并帮助修复它。
因此,这段代码是名为Unit
的单链表类的实现。 ,其中变量是字符串和字符串 vector :
class Unit {
public:
Unit();//constructor
void printAllUnits(Unit *head);//-v
void printUnit(Unit *unit);//-v
Unit *insert(Unit *head,Unit *element);//-v
Unit *getNextUnit(Unit **unit);//-v
Unit *MergeBySN(Unit *leftPtr ,Unit *rightPtr);//-v
void SplitListBySn(Unit* head,Unit** left, Unit** right);//-v
int menuSelection(int correct);//prints a menu-v
void findAndPrintUnitByType(Unit *head, string searchString);
void findAndPrintUnitBySN(Unit *head, string number);
void findAndPrintUnitBySNType(Unit *head,string type, string number);
void findAndPrintUnitByCell(Unit *head, string cell);
void findAndPrintUnitByUnitLocation(Unit *head, string location);
void findAndPrintUnitByDate(Unit *head, string date);
Unit *readFromFile(Unit *head);
void writeToNewFile(Unit *head);
void addToFile(Unit *head);
int checkNumber(string *numberStr);
Unit *deleteUnit(Unit *unit, string type, string sn);//-v
void deleteAll(Unit *unit);
int getChoice(int lower,int upper);
void SortListBySn(Unit **unit);//-v
Unit *SortListByType(Unit *unit);//-v
void mainmenu();//-v
Unit *subInsert(Unit *head,Unit *element);
~Unit(); //destructor
**/*variables*/**
string Type;//type of unit
string SN;//serial number of the unit
int occur;//number of occurences of this serial number during service
vector<string> Cell;//phisical location
vector<string> Date;//vactor to hold the dates of changes
vector<string> unitLocation;
Unit *next;//link to next unit
};
下面是函数 deleteAll 和 printAll 以及带析构函数的构造函数的一些实现:
/*constructor*/
Unit::Unit(){
Type.clear();
SN.clear();
occur=1;
Cell.clear();
unitLocation.clear();
next=NULL;
Date.clear();
}
/*function to print all elements in the list*/
void Unit::printAllUnits(Unit *head){
Unit *tmp;
tmp = head;
cout<<endl;
if (tmp == NULL)
{
cout<<endl<<"There is no units, Nothing to Print.\n"<<endl;
}
else
{
cout<<" Type SN Cell UnitLocations Date "<<endl;
cout<<" ------ ------ ------ -------------- ------ "<<endl;
while (tmp != NULL)
{
printUnit(tmp);
tmp = tmp->next;
}
cout<<endl;cout<<endl;
}
}
/*function to print specific unit*/
void Unit::printUnit(Unit *unit){
int i=1;
string type;
string cell;
string sn;
string location;
string date;
if(unit!=NULL){
type=unit->Type;
sn=unit->SN;
cell=unit->Cell[0];
location=unit->unitLocation[0];
date=unit->Date[0];
cout<<"\t"<<type<<"\t"<<sn<<"\t"<<cell<<"\t\t"<<location<<"\t"<<date<<endl;
for(;i < unit->Cell.size();i++){
cell=unit->Cell[i];
location=unit->unitLocation[i];
date=unit->Date[i];
cout<<"\t\t\t"<<cell<<"\t\t"<<location<<"\t"<<date<<endl;
}
cout<<"Occurency:\t"<<unit->occur<<endl;
}
}
/*destructor*/
Unit::~Unit(){
this->Cell.~vector();
this->Date.~vector();
this->unitLocation.~vector();
this->Type.~basic_string();
this->SN.~basic_string();
}
/*function to insert element in to list by making a decision after what SN to insert it(kind of insertion sort)*/
Unit *Unit::insert(Unit *head,Unit *element){
Unit *currElement;
//*if empty list
if(head==NULL){
return element;
}//if
//*if empty
if(element->SN < head->SN){
element->next=head;
return element;
}//if
currElement=head;
//*compare the serial numbers of elements
//*if more
for(;currElement->next != NULL;currElement=currElement->next){
if(element->SN < currElement->next->SN)
break;
}
//*equal numbers
if(currElement->SN==element->SN){//if SN is equal
if(currElement->Type.compare(element->Type)==0){//if types are the same
currElement->Date.push_back(element->Date[0]);
currElement->occur++;
currElement->Cell.push_back(element->Cell[0]);
currElement->unitLocation.push_back(element->unitLocation[0]);
}
return head;
}
//*put new element between current element and it's next elment
//(if currelement is last then curentelemnt's next ==NULL)
element->next=currElement->next;
currElement->next=element;
return head;
}
/*main prog*/
int main(int argc, char *argv[]){
bool flag=0;
string str;
string *type;//type of unit (
string *sern;//serial number of the unit
string *cell;//phisical location
string *date;//vactor to hold the dates
string *unitlocation;
Unit *head1=NULL;
Unit *tmp=new Unit;
/*getting data*/
cin>>tmp->Type;
cin>>tmp->SN;
cin>>str;tmp->Cell.push_back(str);
cin>>str;tmp->Date.push_back(str);
cin>>str;tmp->unitLocation.push_back(str);
/*inserting in to the list*/
head1=head1->insert(head1,tmp);
head1->printAllUnits(head1);
head1->deleteAll(head1);
head1->printAllUnits(head1);
return 0;
}
问题发生在执行 deleteAll 操作后,正如我在调试器 (VS2008) 字段 Type 和 SN 中看到的那样有 <badptr>
当尝试打印列表时(尽管它是空的)程序会尝试执行此操作并崩溃,尽管我已经检查了 NULL 或空列表。
所以问题是函数有什么问题 deleteALL
?我该如何实现?
最佳答案
错误很简单 - 您试图在删除 head1
后打印它。那是行不通的 — 您不应该对已删除的对象调用方法。
快速查看后,您的代码存在许多问题:
clear
调用。在任何情况下, vector 在初始化时都是空的。printAllUnits
中制作 head
的临时拷贝。有多种方法可以实现deleteAll
。这是一个简单的:
Unit * Unit::deleteAll(Unit * head)
{
vector<Unit*> units;
while (head)
{
units.push_back(head);
head = head->next;
}
for (int i(0); i != units.size(); ++i)
delete units.at(i);
return NULL;
}
int main()
{
// ...
head1 = head1->deleteAll(head1);
Unit::printAllUnits(head1);
}
关于c++ - 如何从链表中删除正确的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7013019/
我有一台 MySQL 服务器和一台 PostgreSQL 服务器。 需要从多个表中复制或重新插入一组数据 MySQL 流式传输/同步到 PostgreSQL 表。 这种复制可以基于时间(Sync)或事
如果两个表的 id 彼此相等,我尝试从一个表中获取数据。这是我使用的代码: SELECT id_to , email_to , name_to , status_to
我有一个 Excel 工作表。顶行对应于列名称,而连续的行每行代表一个条目。 如何将此 Excel 工作表转换为 SQL 表? 我使用的是 SQL Server 2005。 最佳答案 这取决于您使用哪
我想合并两个 Django 模型并创建一个模型。让我们假设我有第一个表表 A,其中包含一些列和数据。 Table A -------------- col1 col2 col3 col
我有两个表:table1,table2,如下所示 table1: id name 1 tamil 2 english 3 maths 4 science table2: p
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 1 年前。 Improve th
下面两个语句有什么区别? newTable = orginalTable 或 newTable.data(originalTable) 我怀疑 .data() 方法具有性能优势,因为它在标准 AX 中
我有一个表,我没有在其中显式定义主键,它并不是真正需要的功能......但是一位同事建议我添加一个列作为唯一主键以随着数据库的增长提高性能...... 谁能解释一下这是如何提高性能的? 没有使用索引(
如何将表“产品”中的产品记录与其不同表“图像”中的图像相关联? 我正在对产品 ID 使用自动增量。 我觉得不可能进行关联,因为产品 ID 是自动递增的,因此在插入期间不可用! 如何插入新产品,获取产品
我有一个 sql 表,其中包含关键字和出现次数,如下所示(尽管出现次数并不重要): ____________ dog | 3 | ____________ rat | 7 | ____
是否可以使用目标表中的LAST_INSERT_ID更新源表? INSERT INTO `target` SELECT `a`, `b` FROM `source` 目标表有一个自动增量键id,我想将其
我正在重建一个搜索查询,因为它在“我看到的”中变得多余,我想知道什么 (albums_artists, artists) ( ) does in join? is it for boosting pe
以下是我使用 mysqldump 备份数据库的开关: /usr/bin/mysqldump -u **** --password=**** --single-transaction --databas
我试图获取 MySQL 表中的所有行并将它们放入 HTML 表中: Exam ID Status Assigned Examiner
如何查询名为 photos 的表中的所有记录,并知道当前用户使用单个查询将哪些结果照片添加为书签? 这是我的表格: -- -- Table structure for table `photos` -
我的网站都在 InnoDB 表上运行,目前为止运行良好。现在我想知道在我的网站上实时发生了什么,所以我将每个页面浏览量(页面、引荐来源网址、IP、主机名等)存储在 InnoDB 表中。每秒大约有 10
我在想我会为 mysql 准备两个表。一个用于存储登录信息,另一个用于存储送货地址。这是传统方式还是所有内容都存储在一张表中? 对于两个表...有没有办法自动将表 A 的列复制到表 B,以便我可以引用
我不是程序员,我从这个表格中阅读了很多关于如何解决我的问题的内容,但我的搜索效果不好 我有两张 table 表 1:成员 id*| name | surname -------------------
我知道如何在 ASP.NET 中显示真实表,例如 public ActionResult Index() { var s = db.StaffInfoDBSet.ToList(); r
我正在尝试运行以下查询: "insert into visits set source = 'http://google.com' and country = 'en' and ref = '1234
我是一名优秀的程序员,十分优秀!