Loading...
NinessonC avatar NinessonC 4 Точки

Задача от упражнение 1 - Remove

Здравейте! Реших да пререша задачите от упражнението и на задача Remove се натъкнах на дребен проблем. Накратко условието беше да се направи масив, да се въведет число и това число да се изтрие на всяко място в масива, ако го съдържа. Аз вместо масив използвах вектор и реших да трия елемнт с vec.erase() функцията. Но всеки път като изтрие елемента, печата една 0 в края допълнителна. Предполагам това се поражда от факта, че на мястото на изтрития елемент добавя една 0, за да се запази размера, но нали затова ползвах вектор, за да е динамична промяната на размера. Ето кода:

#include <iostream>
#include <vector>
using namespace std;

int main() {

	int size = 0;
	int number = 0;
	cin >> size;
	vector <int> vec(size);
	const int vecSize = vec.size();

	for (int i = 0; i < vecSize; i++)
	{
		cin >> vec[i];
		vec.push_back(i);
	}

	cin >> number;
	for (int i = 0; i < vecSize; i++)
	{
		if (number == vec[i])
		{
			vec.erase(vec.begin() + i);
		}
	}

	cout << endl;
	for (int i = 0; i < vecSize; i++)
	{
		cout << vec[i] << ' ';
	}

	return 0;
}

 

Тагове:
0
C++ Fundamentals 01/10/2019 15:18:53
NinessonC avatar NinessonC 4 Точки

Като се замисля, решението не е изобщо добро. Пробвах да въведа вектор от еднакви числа и да ги изтрия, като въведа същото за премахване, но започна да изкарва разни стойности... Не искам само да ги печатам без това число, а да се науча как да ги трия.

0
kolioi avatar kolioi 641 Точки

Прочети още веднъж внимателно какво е вектор http://www.cplusplus.com/reference/vector/vector/ и каква е разликата между вектор и масив. Тогава трябва да ти стане ясно защо е неправилно да използваш vecSize с вектори (но за масиви е ОК). И накрая потърси и прочети за така наречения 'erase-remove idiom' в C++ Ако имаш някакви въпроси, питай :)

1
spasimira25 avatar spasimira25 25 Точки

Здравей, предполагам, че ти питаше на края на лекцията вчера. Ето го моя код с триене. Само "ресайзвам" фор цикъла. Вектора сам си сменя размера. Ако намери и изтрие число трябва да провери същия индекс, а не следващия. Затова съм сложил едно допълнително i--. Живко каза, че проблем ще има, ако трием на нулева позиция, но  така написано, от -1 индекса отново става 0 (Тествах го). Другия вариант, както той спомена е да  махнем i++ от  "for(int i= 0; i<size_of_array; )" и да го сложим в тялото. Например, ако триеш не увеличаваш, else i++;

#include<iostream>
#include<vector>

std::vector<int> remove_function(int remove_number, std::vector<int> vec, int size_of_array){
     for(int i= 0; i<size_of_array; i++){
       if (vec[i]==remove_number){
       vec.erase(vec.begin()+i);
       size_of_array--;
       i--;
       }
     }
       return vec;
}

std::vector<int> read_function(int n){
    std::vector<int>vec(n);
    for(int i=0; i<n; i++)
    {
        std::cin>>vec[i];
    }
        return vec;
}

 

void print_function(const std::vector<int> &vec){
    for (int n : vec){
          std::cout<<n<<" ";
        }

}

int main (){
    int size_of_array;
    int remove_number;

    std::cin>>size_of_array;
    std::vector<int> vec = read_function(size_of_array);

    std::cin>>remove_number;
    vec = remove_function(remove_number, vec, size_of_array);

    print_function(vec);


    }

 

 

 

 

 

0
02/10/2019 14:46:27
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.