【发布时间】:2012-12-13 15:32:18
【问题描述】:
我有下一个问题: 我创建了结构:
struct Series : vector<Candle>
{
Security Sec;
int LookFor;
int TF;
int Corrector;
string ID;
int line;
Series(){};
Series (int _lookfor);
void Update();
};
构造函数:
Series::Series (int _lookfor)
{
LookFor=_lookfor;
for (int i = 1; i<=LookFor; i++)
{
Candle cantype = Candle(i);
push_back(cantype);
}
}
所以,我们称这个构造函数为它用蜡烛值填充对象。 LookFor - 是向量系列中的许多蜡烛。 初始化后我想更新这个系列(如果有更多新蜡烛,我想删除最后一个并在矢量系列的开头插入新的)
void Series::Update()
{
if (size()==LookFor)
{
if (newer(cantype,c1))
{
Candle cantype = Candle(1);
Candle c1 = at(0);
pop_back();
emplace(begin(),cantype);
}
}
我需要初始化这些系列的一个向量:
向量 vec; vec.push_back(系列(3));
构造函数完成了它的工作,一切都很好。 但后来我更新了它们:
for (size_t x =0; x<=size()-1;x++) vec[x].Update();
我有一个问题:它无法保存向量中的更改。在 Update 方法中一切都很好,它在自身中插入所需的蜡烛,但随后方法结束 - 向量的状态(vec 的每个元素)没有变化。在方法中我们看到了变化,但是在它的向量变成了类似构造函数之后,状态还是一样的。 请告诉我,我做错了什么?
【问题讨论】:
-
不要从标准库设施派生。尤其不是来自容器。
-
从 std 容器继承会产生未定义的结果。修复它(撰写而不是继承),如果它不能解决问题,请发布另一个问题。
-
@utnapistim “从标准容器继承会产生未定义的结果”——不,不会
-
这很可能是您没有向我们展示的代码中的逻辑错误