注册 登录
编程论坛 C++教室

练习了一下vector推入类的简单例子,结果循环不了,求大神看一下咋回事

powers0010 发布于 2017-05-20 15:49, 2110 次点击
程序代码:
#pragma once

#include<cstring>
#include<iostream>
using std::cout;
using std::endl;

class person
{
public:
    person(const char * first, const char * second);
    person(const person & p1);
    person & operator =(const person & p1);
    bool operator <(const person & p1) const;
    void show() const;
    void initname(const char * first, const char * second);
    ~person();

private:
    char * firstname;
    char * secondname;
};


程序代码:
#include "StdAfx.h"
#include "person.h"


person::person(const char * first, const char * second)
{
    initname(first,second);
}
person::person(const person & p1)
{
    initname(p1.firstname,p1.secondname);
}
person & person::operator =(const person & p1)
{
    delete [] firstname;
    delete [] secondname;
    initname(p1.firstname,p1.secondname);
    return *this;
}
bool person::operator <(const person & p1) const
{
    if(strcmp(this->firstname,p1.firstname)<0||((strcmp(this->firstname,p1.firstname)==0)&&(strcmp(this->secondname,p1.secondname)<0)))
        return 1;
    return 0;
}
void person::show() const
{
    cout<<firstname<<" "<<secondname<<endl;
}
void person::initname(const char * first, const char * second)
{
    unsigned int len=strlen(first)+1;
    this->firstname=new char(len);
    strcpy_s(firstname,len,first);
    len=strlen(second)+1;
    this->secondname=new char(len);
    strcpy_s(secondname,len,second);
}
person::~person(void)
{
    delete [] firstname;
    delete [] secondname;
}


程序代码:
// vestor01.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
//#include<iostream>
#include"person.h"
#include<vector>
using std::vector;
using std::cin;

int main()
{
    vector<person> people;
    const size_t maxlength=50;
    char firstname[maxlength];
    char secondname[maxlength];
    while(1)
    {
        cout<<"请输入姓(或enter终止):";
        cin.getline(firstname,maxlength ,'\n');
        if(strlen(firstname)==0)
            break;
        cout<<"请输入名:";
        cin.getline(secondname,maxlength ,'\n');
        //people.push_back(person(firstname,secondname));
        person p(firstname,secondname);
        people.push_back(p);
    }
    cout<<endl;
    auto iter=people.begin();
    if(iter!=people.end())
        iter++->show();
    return 0;
}
3 回复
#2
powers00102017-05-20 15:50
跑起来没问题,就是循环直接卡住了。。。
#3
rjsp2017-05-22 08:24
一直听不懂“就是循环直接卡住了。。”是什么意思,就没法回答

两处 new char(len) 改为 new char[len];
其它错误就懒得说了,比如 operator = 竟然不判断自己给自己赋值的情况。
#4
powers00102017-05-22 14:36
回复 3楼 rjsp
[em19给大神撒花,I get it
1