Я хотел бы получить сумму первого последнего элемента в векторе
Вот что я пробовал, по какой-то причине все время получаю нулевое значение. что я должен изменить.
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;
}
сумма = vec [0] + vec [vec.size () - 1];
@seccpur Конечно, после проверки, что размер не равен нулю.
«по какой-то причине я получаю, что значение равно нулю», обратите внимание, что, строго говоря, вы должны включать в вопрос ввод, вывод и ожидаемый результат. Получение нуля в качестве результата может быть прекрасным, если это не правильный результат, но мы не знаем, что вы используете в качестве входных данных.
у вас отсутствует }
, и на самом деле я не знаю, как этот метод может что-либо вернуть, так как внутри цикла k
не может быть 0
и size()
(должен быть size()-1
) одновременно (если только нет только одного элемента)
Вы получаете 0 из-за Undefined Behavior (потому что вы не вернули значение из непустой функции), и код никогда не входит в if (k == v.size()) {
, хотя, если бы это было UB, также из-за моего первого комментария. Возвращаемое значение может быть любым из-за UB в коде. И в коде отсутствует несколько }
, таких как @ user463035818, упомянутых выше.
Пожалуйста, прочтите о минимальный воспроизводимый пример
Вы можете вычислить желаемое значение с помощью
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?
Присваивать другое значение объекту sum
после его создания не требуется. Тогда рекомендуется явно квалифицировать объект const
. Если вам нужно переназначить ему что-то еще, не используйте const
.
Если вектор имеет только 1 элемент, я думаю, что суммирование этого единственного элемента должно быть значением самого элемента, а не двукратным значением. const int sum = vec.empty() ? 0 : (vec.size() == 1) ? vec.front() : (vec.front() + vec.back());
@RemyLebeau Да, в этом есть смысл. Я не мог понять, как OP хотел, чтобы этот случай был обработан, поэтому я отправил связанный тернарный оператор ...
if (k == v.size()) {
обратите внимание, чтоv[v.size()]
находится за пределами допустимого диапазона. Хотя почему ты вообще зацикливаешься?