From 9e914f8792d33ce0e4789f599f0e28c68d105e28 Mon Sep 17 00:00:00 2001 From: KLYkl <133184663+KLYkl@users.noreply.github.com> Date: Fri, 17 May 2024 13:33:46 +0800 Subject: [PATCH] Update array_deque.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将43行的return (i + capacity()) % capacity();改为return (i % capacity() + capacity()) % capacity(); 原因:原来的表达式“(i + capacity()) % capacity();”如果i是负数的话,需要保证capacity() >= -i。而更改后的表达式“ (i % capacity() + capacity()) % capacity();” 中的先对i取模相加,最后再取模操作会确保结果是一个非负整数,并且不会超过 capacity() 的值。这是因为取模操作会返回一个在 0 到 capacity() - 1 范围内的数,即使原始的和可能是负数。保证函数index()的传入形参i<-capacity()不会崩溃,且能正确返回 0 到 capacity() - 1 范围内的的索引值。 --- codes/cpp/chapter_stack_and_queue/array_deque.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codes/cpp/chapter_stack_and_queue/array_deque.cpp b/codes/cpp/chapter_stack_and_queue/array_deque.cpp index 00bf7769f..b8c73b2bc 100644 --- a/codes/cpp/chapter_stack_and_queue/array_deque.cpp +++ b/codes/cpp/chapter_stack_and_queue/array_deque.cpp @@ -40,7 +40,7 @@ class ArrayDeque { // 通过取余操作实现数组首尾相连 // 当 i 越过数组尾部后,回到头部 // 当 i 越过数组头部后,回到尾部 - return (i + capacity()) % capacity(); + return (i % capacity() + capacity()) % capacity(); } /* 队首入队 */