• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Существующий Элемент В Векторе

  • Автор темы Vunderkind
  • Дата начала
Статус
Закрыто для дальнейших ответов.
V

Vunderkind

Здравствуйте!
В общем мне нужно написать код который должен добавлять новый элемент в вектор, если нет такого элемента, а если такой элемент уже есть в векторе, прога должна бросить его в исключение и вывести сообщение о ошибке.

Я написал прогу, но столкнулся с одной проблемой. Проблема такого: ранее добавленные мною элементы не сохраняются, и при повторном добавлении этого элемента прога не выводить сообщение об ошибке.

Требования:
нужно тестировать в функции main
нужно использовать шаблонный класс

C++:
#include<iostream>
#include<vector>
#include<stdexcept>

using namespace std;

template <class T>
class Set {

public:
T vec; 
Set(void):vec(5){}
class error
{
public:
T data;
error(T d) : data(d) {}
};
void vect(T d);

};

template <typename T>
void Set<T>::vect(T d){
Set<vector<T>> asp;	
bool isEx=false;
for(int i=0;i<asp.vec.size();i++){

try{

if(asp.vec[i]==d){
isEx=true;
throw error(d);
}
}
catch (Set<T>::error e)
{
cout <<endl<<e.data<<" is already exist!\n"<<endl;
}
}
if(isEx==false)
asp.vec.push_back(d);
for(int i=0;i<asp.vec.size();i++){
cout<<asp.vec[i]<<" ";
}
cout<<endl;
}


int main(){

Set<int> vecti; 
Set<double> db;

vecti.vect(3);  // передаю в функцию цифру 3 чтобы он добавил в вектор
db.vect(10.2);
vecti.vect(3); // повторно передаю в функцию цифру 3, должна вывести сообщение об ощибке


system("pause");
return 0;}

можно объявить вектор глобальным, но у меня не получилось.
 
Q

qqwertty

То что я смсог увидеть:
вы работаете с Set<vector<T>> asp; ЗАЧЕМ? asp удаляется при выходе из функции. Вам нужно работать с членом класса, т.е. с vec.

В след раз хотя бы код форматируйте, ну, сложно же читать...
 
V

Vunderkind

То что я смсог увидеть:
вы работаете с Set<vector<T>> asp; ЗАЧЕМ? asp удаляется при выходе из функции. Вам нужно работать с членом класса, т.е. с vec.

В след раз хотя бы код форматируйте, ну, сложно же читать...

решил проблему самостоятельно. прост впервые использую шаблонные классы, вот исправный код
C++:
#include<iostream>
#include<vector>
#include<stdexcept>

using namespace std;

template <class T>
class Set {

public:
vector<T> vec;  // в прошлый раз объявил как T vec;
Set(void):vec(5){}
class error
{
public:
T data;
error(T d) : data(d) {}
};
void vect(T d);

};

template <typename T>
void Set<T>::vect(T d){
bool isEx=false;
for(int i=0;i<vec.size();i++){

try{

if(vec[i]==d){
isEx=true;
throw error(d);
}
}
catch (Set<T>::error e)
{
cout <<endl<<e.data<<" is already exist!\n"<<endl;
}
}
if(isEx==false)
vec.push_back(d);
for(int i=0;i<vec.size();i++){
cout<<vec[i]<<" ";
}
cout<<endl;
}


int main(){

Set<int> vecti; // integer
Set<double> db;		// double

vecti.vect(3);  // involve this element to vector, output: message about error, 
//because this element already element of vector 

db.vect(10.2); // involve this element to vector
vecti.vect(3);


system("pause");
return 0;}
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!