При работе с C++ в первый раз, мое предложение: забудьте все, что C связаны и имеет ++ аналог C. В этом случае остановите использование массивов в стиле C и используйте вместо этого std::array
(то же самое можно сделать с помощью std::vector
, но я оставлю его как упражнение для чтения).
Хорошо, вы хотите изучить C++? Вот как ваша проблема, вычисления суммы всех элементов массива, могут быть решены в 3-х строк кода с использованием C++:
#include <iostream>
#include <array>
#include <algorithm>
int main(int, char**) {
std::array<int, 3> nums { 1, 2, 3 };
int sumvals = std::accumulate(std::begin(nums), std::end(nums), 0);
std::cout << "The sum of the array elements is: " << sumvals << std::endl;
}
Объяснение очень простое: в первой строке мы выделяем массив из 3 элементов типа int
и инициализировать его тремя значениями 1, 2, 3
. Конечно, вы можете изменить эти значения, то другое или инициализировать их так:
std::array<int, 3> nums;
// ...
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
Самое главное, чтобы понять здесь, что std::array
действовать точно так же, как массивы C-стиле, но они являются более мощными и гибкими, чтобы использовать ,
Во второй строке мы используем std::accumulate
, стандартный алгоритм находится в <algorithm>
(кто бы мог подумать), чтобы вычислить сумму всех элементов контейнера (в нашем случае nums
).Алгоритм довольно прост и вы можете представить себе как эквивалент:
int init = 0;
for (int i = 0; i < 3; ++i)
init += nums[i];
return init;
для вашего собственного конкретного случая. Единственное большое отличие в том, что он использует итераторы вместо. Что такое итераторы? Ну, это то, что вам придется исследовать самостоятельно. Я могу гарантировать, что в Интернете есть много статей и сообщений, которые объяснят это. Например, я предлагаю вам начать from here.
Просто помните, что std::begin
будет извлекать итератор в первый элемент массива, а std::end
рассчитает итератор на элемент конца массива. Использование этих функций довольно распространено со стандартными алгоритмами, и вы должны привыкнуть к нему. Общие идеи
std::accumulate(std::begin(nums), std::end(nums), 0);
является
Вычислить сумму всех элементов контейнера, начиная с std::begin(nums)
и заканчивая (исключая) std::end(nums)
, учитывая начальное значение 0
.
Как вы можете видеть, подпись функции и параметры довольно прямолинейны. И, наконец, в последней строке мы распечатываем наш результат (точно так же, как мы это делали раньше).
Не могли бы вы пояснить, что вы подразумеваете под «добавлением двух массивов вместе»? Например, если у меня есть {1, 2, 3}, и я добавляю это с {1, 1, 1}, должен ли результат быть {2, 3, 4} или должен быть результатом 9? Или вы имеете в виду нечто большее, чем {1, 2, 3} + 5 = {6, 7, 8}? Или {1, 2, 3, 4} = 10? – chwarr