Получение суммы первого и последнего значения в векторе C++

Я хотел бы получить сумму первого последнего элемента в векторе

Вот что я пробовал, по какой-то причине все время получаю нулевое значение. что я должен изменить.

int sum_first_last(vector <int> &v) {
for (int k = 0; k < v.size(); ++k) {
        if (k == 0) {
            int first_element;
            first_element = v[k];

            if (k == v.size()) {
                int last_element;
                last_element = v[k];
                return first_element + last_element;
            }
 }

int main() {

    vector<int> v1;
    int n;
    int k = 0;
    cout << "please enter number of elements you wish to add" << endl;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cout << "enter the value" << endl;
        cin >> k;
        v1.push_back(k);
    }

    sum_first_last(v1);
    cout << "the value is " << sum_first_last(v1) << endl;

    return 0;
   }
if (k == v.size()) { обратите внимание, что v[v.size()] находится за пределами допустимого диапазона. Хотя почему ты вообще зацикливаешься?
drescherjm 30.10.2018 13:46

сумма = vec [0] + vec [vec.size () - 1];

seccpur 30.10.2018 13:46

@seccpur Конечно, после проверки, что размер не равен нулю.

Some programmer dude 30.10.2018 13:47

«по какой-то причине я получаю, что значение равно нулю», обратите внимание, что, строго говоря, вы должны включать в вопрос ввод, вывод и ожидаемый результат. Получение нуля в качестве результата может быть прекрасным, если это не правильный результат, но мы не знаем, что вы используете в качестве входных данных.

463035818_is_not_a_number 30.10.2018 13:49

у вас отсутствует }, и на самом деле я не знаю, как этот метод может что-либо вернуть, так как внутри цикла k не может быть 0 и size() (должен быть size()-1) одновременно (если только нет только одного элемента)

463035818_is_not_a_number 30.10.2018 13:52

Вы получаете 0 из-за Undefined Behavior (потому что вы не вернули значение из непустой функции), и код никогда не входит в if (k == v.size()) {, хотя, если бы это было UB, также из-за моего первого комментария. Возвращаемое значение может быть любым из-за UB в коде. И в коде отсутствует несколько }, таких как @ user463035818, упомянутых выше.

drescherjm 30.10.2018 13:57

Пожалуйста, прочтите о минимальный воспроизводимый пример

463035818_is_not_a_number 30.10.2018 14:08
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
7
315
1

Ответы 1

Вы можете вычислить желаемое значение с помощью

const int sum = vec.front() + vec.back();

Однако вы не хотите вызывать это для пустого вектора, поэтому заранее убедитесь, что vec.empty() возвращает false.

const int sum = vec.empty() ? 0 : vec.front() + vec.back();

Для вектора с одним элементом это будет идентично const int sum = 2*vec.front().

спасибо, работает. Не могли бы вы объяснить, почему использовали const? а не только int?

Amitay Tsinis 30.10.2018 16:01

Присваивать другое значение объекту sum после его создания не требуется. Тогда рекомендуется явно квалифицировать объект const. Если вам нужно переназначить ему что-то еще, не используйте const.

lubgr 30.10.2018 16:02

Если вектор имеет только 1 элемент, я думаю, что суммирование этого единственного элемента должно быть значением самого элемента, а не двукратным значением. const int sum = vec.empty() ? 0 : (vec.size() == 1) ? vec.front() : (vec.front() + vec.back());

Remy Lebeau 30.10.2018 16:25

@RemyLebeau Да, в этом есть смысл. Я не мог понять, как OP хотел, чтобы этот случай был обработан, поэтому я отправил связанный тернарный оператор ...

lubgr 30.10.2018 16:27

Другие вопросы по теме