vector<int> v;
int temp, k, b, l;
while(cin>>temp) v.push_back(temp);
for (int i=0; i<50; ++i) {
for(int i=0; i<v.size(); ++i) {
if(i+1>v.size() && v[i-1]>v[i]) {
k=v[i-1]; b=v[i];
v[i-1]=b; v[i]=k;
}
if(v[i]>v[i+1]) {
k=v[i+1]; b=v[i];
v[i+1]=b; v[i]=k;
}
}
}
for(int i=0; i<v.size(); ++i)
и этоv[i-1]>v[i]
как это сочетается?
for (int i=0; i<50; ++i)
Зачем вы мешаете C и С++?
внимательно смтрите. Если i=0, то чему равно i-1?
В векторе у меня 10 ячеек, соответственно, когда программа доходит до v[i(то есть 10)], она проверит, больше ли последняя ячейка следующей ячейки (v[i+1(то есть 11)], но беда в том, что ячейки 11 не существует.
Поэтому я добавил это условие, которое проверяет, так скажем, существует ли следующая ячейка, а если не существует, то проверить, больше ли предыдущее значение ячейки, чем последнее значение ячейки, и выполнить в случае необходимости их перестановку.
if(v[i]>v[i+1]) {
все равно выполнится. иногда в голове рождаются задачи, которые хочется выполнить, и проверить себя таким образом, а смогу ли или нет.
Откуда в списке берутся два нуля?
vector<int> v{9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
int temp, k, b, l;
// ...
for(int i = 0; i < v.size(); ++i) // v.size() == 10 i < 10 [0 ... 9]
{
if(i + 1 > v.size() && v[i - 1] > v[i]) // [0 ... 9] + 1 > 10 никогда не выполняется
{
k = v[i - 1];
b = v[i];
v[i - 1] = b;
v[i] = k;
}
// пропустим 9 шагов i == 9
// помним условие (пока i < 10)
if(v[i] > v[i + 1]) // v[9] > v[9 + 1] "повезло" см vector::end() в v[10] оказался 0
// но в след. раз там будет 9
{
k = v[i + 1];
b = v[i];
v[i + 1] = b; // v[10] = 9
v[i] = k; // v[9] = 0; {0, 1, 2, 3, 4, 5, 6, 7, 8, 0}
}
}
// далее еще хх итераций внешнего цикла
Есть множество задач, которые уже решены и решения строго математически доказаны.
Не мое дело, но то что вы делаете это даже не "велосипедостроение", Язык вы лучше не узнаете, навыков новых не получите, время потратите.
Конкретно по вашему вопросу (не смотря ни на что)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int temp=0;
vector<int> data;
while(cin>>temp) data.push_back(temp);
int next=0;
for (int s=0; s<data.size()-1; ++s)
{
for(int current=0; current<data.size()-1; ++current)
{
next=current+1;
if(data[current]>data[next])
{
temp=data[current];
data[current]=data[next];
data[next]=temp;
}
}
}
return 0;
}
А разве я буду что-то смыслить в программировании, если буду просто-напросто использовать готовые решения?
К сожалению, я так и не понял логики этой программы. Откуда берётся нуль, мне неизвестно.
чтобы пошагово взглянуть на выполнение, так сказать, но нить выполнения обрывалась и я запутывался.
Опыт и благоразумие помогут избежать некоторых тупиков, но обойти их все не удастся. Так что в действительности вы должны быстро понять, что ваш путь завел в тупик, и иметь смелость для отступления. Иногда это называется «правилом ямы»: если вы оказались в яме, прежде всего перестаньте копать.