Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > удаление из вектора по указателю на элемент вектор


Автор: fuckingniger 20.6.2011, 18:03
как удалить элемент вектора, имея указатель на этот  элемент

Автор: hawk3500 20.6.2011, 21:23
Привиди пример.

Автор: borisbn 21.6.2011, 09:44
у меня http://forum.vingrad.ru/forum/topic-332504/kw-vector-erase.html ?
Цитата оттуда (Earnest)
Цитата

так что конструкция типа CMyVector::iterator it = vector.begin() + (pointer_to_element - &vector[0]) работать должна всегда

Код

v.erase( v.begin() +(ptr - &v[ 0 ]) );

так не работает ?

Автор: fuckingniger 21.6.2011, 14:24
 нет. Поэтому и написал)

Автор: borisbn 21.6.2011, 14:37
Цитата(fuckingniger @  21.6.2011,  14:24 Найти цитируемый пост)
 нет. Поэтому и написал)

что не работает - секрет ? Давай поочерёдно:
1.
Код
int offset = ptr - &v[ 0 ];
cout << offset;

2. 
Код
cout << *ptr;

3.
Код
vector< int >::iterator it = v.begin() + offset;
cout << (*it);

Автор: volatile 22.6.2011, 01:18
Бьюсь об заклад, что у fuckingniger, указатель указывает просто мимо вектора.
Скорей всего на копию элемента. (телепатия это сила!)

fuckingniger покажите вашу функцию find_vector_value()
Собака порылась именно там. 

Автор: fuckingniger 22.6.2011, 06:53
Код

COORD* find_vector_value(int x,int y,vector<COORD> t)//есть ли такой вектор в списке и вернем его если есть
{
    COORD* it= &t.front();
    COORD* ptr= &t.back();
    if(it->X==x && it->Y==y)
        return it;
    while(it != ptr)
    {
        it++;
        if(it->X==x && it->Y==y)
            return it;
        
    }
    return NULL;
}

Автор: borisbn 22.6.2011, 07:16
Ты возвращаешь указатель на элемент вектора t!!!
Который "живёт" только в этой ф-ции. Т.е. на копию какого-то вектора.…
Воспользуйся find_if
или просто find, если в COORD больше ничего нет, кроме x и y

Автор: asmdzen 22.6.2011, 09:54
непонятно вообще зачем используются указатели, можно ведь по индексу пройтись или итератором обойтись, или это привычки Сишника )
COORD* find_vector_value(int x,int y,vector<COORD>& t) может так пойдет?

Автор: borisbn 22.6.2011, 11:41
Цитата(asmdzen @  22.6.2011,  09:54 Найти цитируемый пост)
COORD* find_vector_value(int x,int y,vector<COORD>& t) может так пойдет?

тогда уж
Цитата
COORD* find_vector_value(int x,int y, const vector<COORD>& t)

хотя, лучше find_if или find. лови
http://liveworkspace.org/code/b9be19a72a5d3ee6aafec475b97846ff

Автор: fuckingniger 22.6.2011, 12:21
а разве они автоматически по ссылке не передаются?

Автор: bsa 22.6.2011, 12:25
Цитата(fuckingniger @  22.6.2011,  12:21 Найти цитируемый пост)
а разве они автоматически по ссылке не передаются? 

нет конечно!!! в С++ ничего автоматически по ссылке не передается - как написал, так и будет передано.

Автор: borisbn 22.6.2011, 12:49
Цитата(fuckingniger @  22.6.2011,  12:21 Найти цитируемый пост)
а разве они автоматически по ссылке не передаются?

ещё автоматически ищется максимальный элемент и делится на него  smile 

Автор: Earnest 22.6.2011, 13:43
Автоматически (т.е. сами собой) возникают только ошибки. Все остальное приходится делать руками... smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)