获取作为类变量的 Deque 大小时未定义的行为
Undefined Behavior When Getting the Size of Deque which is a Class Variable
我使用两个deque作为类变量来实现数据结构,以便有效地添加到中间。 因此,每当我向我的 DS 添加一个元素时,如果两个 deques 的大小差异大于 1,则两个 deques 将重新平衡自己,如 rebalace(( 所示。
但是,(deque2.size(( - deque1.size(((> 1 的条件没有按预期工作。第一个元素将始终被推送到 deque1,它的大小为 1,而 deque2 的大小为 0。然而,当我调试时,(deque2.size(( - deque1.size((( 计算出一些非常大的整数并导致条件为真。
当我尝试使用局部变量来存储 deques 的大小及其大小差异时。它按预期工作。
class teque{
private:
deque<ui> firstHalf;
deque<ui> secondHalf;
void rebalance(){
int size1 = firstHalf.size();
int size2 = secondHalf.size();
int diff1 = firstHalf.size() - secondHalf.size();
int diff2 = secondHalf.size() - firstHalf.size();
if(firstHalf.size() == secondHalf.size()) return;
else if (firstHalf.size() - secondHalf.size() > 1){
secondHalf.push_front(firstHalf.back());
firstHalf.pop_back();
}
else if ((secondHalf.size() - firstHalf.size()) > 1){ //Didn't work as expected
cout << (secondHalf.size() - firstHalf.size()); //Output a very large number
firstHalf.push_back(secondHalf.front());
secondHalf.pop_front();
}
//debug();
}
public:
teque() {};
void push_back(ui ele){
firstHalf.size() == 0 ? firstHalf.push_back(ele) : secondHalf.push_back(ele);
rebalance();
}
void push_front(ui ele){
firstHalf.push_front(ele);
rebalance();
}
void push_middle(ui ele){
firstHalf.push_back(ele);
rebalance();
}
ui get (ui index){
if(index < firstHalf.size()) return firstHalf[index];
else //if(index >= firstHalf.size())
return secondHalf[index-firstHalf.size()];
}
int main(){
teque test = teque();
teque.push_back(9);
}
是我对C++阶级的理解是错误的吗?
deque.size()
返回一个值size_type
,这是无符号的。因此,如果你得到一个负值,你会得到一个非常大的正值。
相关文章:
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- c++11评估顺序(未定义的行为)
- 使用mysql c++连接器的未定义引用
- 从python调用openMP共享库时,未定义opnMP函数
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 具有外部"c"和程序集的未定义函数
- 此增量后语句是否会导致未定义的行为?
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在C++中使用内联方法时出现未定义的符号错误
- 获取作为类变量的 Deque 大小时未定义的行为