Я знаю, что эта ошибка относится к неопределенному поведению (я так думаю), но я перечитал свой код 20 раз и не вижу, что такое UB!?
Я делаю Leetcode 238. Продукт Array Except Self, и вот мой код (кстати, я не знаю, правильно ли это решение):
class Solution { public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> result;
map<int, int> map;
for(int i = 0; i < nums.size(); i++){
map[i] = nums[i];
}
for(int i = 0; i < nums.size(); i++){
for(auto& it : map){
if(it.first != i){
result[i] = nums[i] * result[i];
}
}
}
return result;
} };
Не могли бы вы уточнить? Я полный новичок.
Это доказывает, что использование таких сайтов, как LeetCode
, и решение случайных головоломок по программированию — не лучший способ изучения C++. std::vector
не растет автоматически при использовании []
. Кроме того, такие сайты, как LeetCode
, предполагают, что вы знаете язык, который будете использовать, достаточно хорошо, чтобы никогда не делать ошибок, когда вы их делаете — они не предназначены для обучения C++.
result[i] = nums[i] * result[i];
--> result.at(i) = nums[i] * result.at(i);
-- Это должно ясно объяснить проблему, так как это вызовет исключение std::out_of_range
.
Ах да, достаточно просто! Спасибо. Что было бы хорошим способом учиться тогда? Я также прохожу курс курса, я уверен, что они упомянули об этом, но я, должно быть, пропустил это.
@PhilBreezyy Видеть это
Вы можете заменить vector<int> result;
на vector<int> result(nums.size());
Это инициализирует все значения result
равными 0. Это не решит проблему, но избавит вас от ошибки времени выполнения, которую вы получаете.
Вы забыли изменить размер результирующего вектора.