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

Тема в разделе "Общие вопросы по С и С++", создана пользователем Vunderkind, 17 мар 2012.

Статус темы:
Закрыта.
  1. Vunderkind

    Vunderkind Active Member

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

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

    Требования:
    нужно тестировать в функции 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;}
    можно объявить вектор глобальным, но у меня не получилось.
     
  2. qqwertty

    qqwertty Гость

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

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

    Vunderkind Active Member

    Регистрация:
    26 окт 2010
    Сообщения:
    27
    Симпатии:
    0
    решил проблему самостоятельно. прост впервые использую шаблонные классы, вот исправный код
    Код (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;}
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей