1

似乎该属性test aisbn已成功存储调用setCode(),的数据setDigit()。但是当我尝试将这些值存储到list<test> simul

setDigit()list 属性在 code之后取 digit 的值。如何将代码和数字都放入列表属性中?我看不出问题出在哪里。编码:

#include <iostream>
#include <stdlib.h>
#include <string>
#include <fstream>
#include <list>
using namespace std;

class test
{
    private:
        string code;
        int digit;

    public:
        //constructor
        test(): code(""), digit(0) { }

        //copy constructor
        test(const test &other):
        digit(other.digit)
        { 
            for(unsigned int i=0; i < code.length(); i++)   
                code[i] = other.code[i];
        }

        //set up the private values 
        void setCode(const string &temp, const int num);
        void setCode(const string &temp);
        void setDigit(const int &num);


        //return the value of the pointer character 
        const string &getCode() const;
        const unsigned int getDigit() const;
};

const string& test::getCode() const
{
    return code;
}
const unsigned int test::getDigit() const
{
    return digit;
}
void test::setCode(const string &temp, const int num)   
{
    if((int)code.size() <= num)
    {
        code.resize(num+1);
    }
    code[num] = temp[num];
}
void test::setCode(const string &temp)  
{
    code = temp;
}
void test::setDigit(const int &num)
{
    digit = num;
}


int main()
{
    const string contents = "dfskr-123";

    test aisbn;
    list<test> simul;
    list<test>::iterator testitr;
    testitr = simul.begin();
    int count = 0;

    cout << contents << '\n';
    for(int i=0; i < (int)contents.length(); i++)
    {
        aisbn.setCode(contents);
        aisbn.setDigit(count+1);
        simul.push_back(aisbn);
        count++;
    }
    cout << contents << '\n';

    /*for(; testitr !=simul.end(); simul++)
    {
        cout << testitr->getCode() << "\n";
    }*/

}
4

2 回答 2

0

看起来您的for循环有问题,您需要for像这样修改循环:

for(testitr = simul.begin(); testitr !=simul.end(); testitr++)
    ^^^^^^^^^^^^^^^^^^^^^^^                         ^^^^^^^^^

虽然,push_back不会使迭代器无效,因为std::list我认为在使用它的地方设置迭代器更具可读性。根据您的回复,您还需要修改copy constructor

test(const test &other): code(other.code), digit(other.digit) {}
                         ^^^^^^^^^^^^^^^^  
于 2013-04-16T01:33:42.557 回答
0

如何使用vector

std::vector<test> simul;

 for(int i=0; i < (int)contents.length(); i++)
    {
        aisbn.setCode(contents);
        aisbn.setDigit(count+1);
        simul.push_back(aisbn);
        count++;
    }

与容器相关的迭代器、指针和引用无效。否则,只有最后一个迭代器无效。

于 2013-04-16T01:47:06.413 回答