#c #loops #for-loop #vector #nested-loops
#c #циклы #for-loop #вектор #вложенные циклы
Вопрос:
Я пытаюсь выяснить, что не так с моим вложенным циклом, не получая ответа на упражнение, над которым я работаю. Первоначальная ошибка заключается в том, что происходит сравнение подписности.
Подсказка: учитывая вектор целых чисел с именем vec, найдите сумму произведения всех пар векторных элементов. Пример: {1,2,3}: (1×2) (1×3) (2×3) = 11. Это должно быть сохранено в переменной с именем result .
Функция уже настроена, и я просто пишу тело.
Моя идея заключалась в том, что я пытался захватить первый элемент в векторе с помощью первого цикла for, а затем использовал второй цикл for для умножения первого элемента на остальные элементы в векторе. Я думал, что j = i 1 позволит мне избежать значения, используемого в первом цикле for, и получить доступ к остальным элементам.
int result = 0;
int pair = 0;
for(int i = 0; i<=vec.size(); i){
int num1 = vec.at(i);
for(int j = i 1; j <= vec.size(); j){
int num2 = vec.at(j);
pair = num1 * num2;
result = result pair;
}
}
Комментарии:
1. Вы не объясняете, в чем ваша проблема
2. вызывается результат
num1*num2
product
. Старайтесь избегать стандартных имен, напримерpair
, потому что это вstd::pair
3. Привет, если вам понятен ответ, пожалуйста, отметьте его также, чтобы другие люди могли узнать об этом.
Ответ №1:
Есть две ошибки
-
Размер вектора — это величина без знака, в частности, тип
size_t
, так что это тип, который вы должны использовать для своейi
переменной. Это исправит предупреждение о сравнении со знаком / без знака. -
Векторы индексируются с нуля. Таким образом, допустимые индексы для вектора изменяются от нуля до единицы меньше размера вектора. So
i<=vec.size()
неверно.
Объединяя оба этих исправления, ваш цикл должен выглядеть следующим образом
for (size_t i = 0; i < vec.size(); i) {
Похожие проблемы с j
циклом.
Ответ №2:
int result = 0;
int pair = 0;
for(size_t i = 1; i <= vec.size(); i){ // if you want it 1 indexed
int num1 = vec.at(i-1);
for(size_t j = i 1; j <= vec.size(); j){
int num2 = vec.at(j-1);
pair = num1 * num2;
result = result pair;
}
}
int result = 0;
int pair = 0;
for(size_t i = 0; i < vec.size(); i){ // if you want it 0 indexed
int num1 = vec.at(i);
for(size_t j = i 1; j < vec.size(); j){
int num2 = vec.at(j);
pair = num1 * num2;
result = result pair;
}
}
Объяснения, данного @john, достаточно, чтобы ответить на ваш запрос. Также вам следует быть осторожным с именами переменных, как это было предложено @phuclv.
Надеюсь, теперь у вас все в порядке.