这是问题所在:
我有一个名为“状态”的类,它存储一个int vector 。在我的程序中,我正在创建状态 vector ,但是在此之后,当我尝试获取int vector 的值时,它似乎是空的。我创建了一个.cpp文件来进行测试:

state.h:

#ifndef STATE_H
#define STATE_H

#include <vector>

class state {
    public:
        std::vector<int> vectorstate;
        ~state();
        state();
        state(state &sta);
        state(const state &sta);
        state & operator= (const state &sta);
        bool operator==(const state &sta) const;
};

#endif

state.cpp:
#include "state.h"
using namespace std;

state::~state(){
}

state::state(){
}

state::state(state &est){
    for(int i=0;i<vectorstate.size();i++)
        vectorstate[i] = est.vectorstate[i];
}

state::state(const state &est){
    for(int i=0;i<vectorstate.size();i++)
        vectorstate[i] = est.vectorstate[i];
}

state & state::operator= (const state &est) {
    if (this == &est) return *this;
    for(int i=0;i<vectorstate.size();i++)
        vectorstate[i] = est.vectorstate[i];
    return *this;
}

bool state::operator==(const state &est) const {
    for(int i=0;i<vectorstate.size();i++)
        if(vectorstate[i] != est.vectorstate[i])
            return false;
    return true;
}

main.cpp(用于测试):
#include <iostream>
#include <algorithm>
#include <vector>
#include "state.h"
using namespace std;

int main(){
    state before, after;
    for(int i=0;i<9;i++)
        before.vectorstate.push_back(i);
    for(int i=0;i<before.vectorstate.size();i++)
        cout << before.vectorstate[i] << " ";
    cout << endl << endl;
    for(int i=3;i<12;i++)
        after.vectorstate.push_back(i);
    for(int i=0;i<after.vectorstate.size();i++)
        cout << after.vectorstate[i] << " ";
    cout << endl << endl;
    vector<state> vetor;
    vetor.push_back(before);
    vetor.push_back(after);
    for(int i=0;i<vetor[0].vectorstate.size();i++)
        cout << vetor[0].vectorstate[i] << " ";
    cout << endl;
    for(int i=0;i<vetor[1].vectorstate.size();i++)
        cout << vetor[1].vectorstate[i] << " ";
    cout << endl;
    state aux;
    aux = vetor.front();
    for(int i=0;i<aux.vectorstate.size();i++)
        cout << aux.vectorstate[i] << " ";
    return 0;
}

并输出:

http://i.imgur.com/A60K72e.jpg
(对不起,该链接,我无法在此处发布图片,我认为是引起声誉的原因)。

如您所见,我以不同的方式尝试访问此int vector ,但没有任何结果,我们将不胜感激!

最佳答案

问题出在复制构造函数和赋值运算符的实现上。

state & state::operator= (const state &est) {
    if (this == &est) return *this;
    for(int i=0;i<vectorstate.size();i++)
        vectorstate[i] = est.vectorstate[i];
    return *this;
}

如果vectorstatethis当前为空,则vectorstate.size()将返回0,并且for循环的内容将永远不会执行。在复制构造函数和赋值运算符内部,确保复制完整的 vector (std::vector具有有效的复制构造函数)。

或者更好的是,不要实现它们,而让编译器生成的副本构造函数和赋值完成工作。

关于c++ - vector 插入后丢失数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23761213/

10-11 23:07
查看更多