似乎属性test aisbn成功存储了调用setCode()setDigit() 但是当我尝试将这些值存储到list<test> simul ,麻烦开始失败

list属性使用setDigit()之后的setDigit()值,但使用代码。 如何将代码和数字都放入list属性? 我看不出问题出在哪里。 编码:

#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";
    }*/

}

===============>>#1 票数: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) {}
                         ^^^^^^^^^^^^^^^^  

===============>>#2 票数: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++;
    }

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

  ask by user2282596 translate from so

未解决问题?本站智能推荐: