gpt4 book ai didi

c++ - vector 插入后丢失数据

转载 作者:行者123 更新时间:2023-11-30 04:04:24 25 4
gpt4 key购买 nike

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

状态.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

状态.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;
}

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com