#c
#c
Вопрос:
Это то, что я хочу: на основе исходного массива создайте новый массив, содержащий все элементы исходного массива, которые расположены перед первым отрицательным элементом. Вот мой код:
#include <iostream>
#include <ctime>
#include <cmath>
#include <iomanip>
#include <vector>
using namespace std;
int main() {
const int N = 1000;
int a[N];
int k;
bool f = false;
vector<int> b;
cout << "Input size of array: ";
cin >> k;
cout << "Input elements: ";
for (int i = 0; i < k; i ) cin >> a[i];
cout << endl;
for (int i = 0; i < k; i )
{
if (a[i] < 0 amp;amp; !f)
{
f = true;
}
if (f) b.push_back(a[i]);
}
if (!f) cout << "No negative n >> ";
else for (int i = 0; i < b.size(); i ) cout << b[i] << " ";
cin.get();
return 0;
}
Я вывожу первое отрицательное значение, но нужно ПЕРЕД первым отрицательным.
Комментарии:
1. В
if (f) b.push_back(a[i]);
подумайте о том, когда условие будет истинным, и хотите ли вы, чтобы код выполнялся в этом случае. Еще лучше использовать отладчик, чтобы увидеть, каково состояние переменных при выполнении.2. именование переменных важно. Если бы ваш
bool f = false;
был названbool do_copy_elements_to_the_other_vector = false;
, было бы легче понять, почему он должен начинаться какtrue
notfalse
3. Здесь очень не одобряется удаление части вашего вопроса, которая делает его понятным для будущих читателей.
Ответ №1:
Здесь вы используете f
в качестве флага, который изначально false . Это означает, что вы еще не получили никакого отрицательного значения. Когда значение f
будет истинным, вы можете сказать, что получили хотя бы одно отрицательное число, и поскольку f равно true, вы не будете продвигать какие-либо элементы дальше.
Итак, вы должны вводить вектор, пока не получите хотя бы 1 отрицательное число. Это означает, что вы должны нажимать только тогда, когда флаг имеет значение false .
Итак, ваш оператор push должен выглядеть следующим образом:
if (!f) b.push_back(a[i]);