 |
|

01.11.2009, 01:18
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами:
10386906
Репутация:
599
|
|
потому что вызвыать resumethread можно только из активного потока, потому как сонный ничего не может делать(правда логично?).
чтото из твоих вопросов вырисовывается чудовищная архитектура сетевого приложения. попробуй прочитать статьи на codeproject'e или у каких нить русских сайтов. на васме том же основы по сокетам.
|
|
|

01.11.2009, 17:09
|
|
Участник форума
Регистрация: 29.12.2004
Сообщений: 105
С нами:
11243422
Репутация:
21
|
|
Здравствуйте! Возник следующий вопрос:
Имеется массив vector<int> elements, есть число в переменной int del_element. Необходимо найти в elements элемент со значением del_element и если он есть, то удалить его из elements.
Так как по вектору ходят с помощью итераторов, то как мне его сравнить с int?
|
|
|

01.11.2009, 17:18
|
|
Участник форума
Регистрация: 06.02.2006
Сообщений: 177
С нами:
10661593
Репутация:
88
|
|
если не ошибаюсь так
Код:
std::vector<int>::iterator channelIter = intVector.begin()
std::cout<< (int)(*channelIter);
Последний раз редактировалось Irdis; 01.11.2009 в 17:31..
|
|
|

01.11.2009, 17:33
|
|
Участник форума
Регистрация: 29.12.2004
Сообщений: 105
С нами:
11243422
Репутация:
21
|
|
Сообщение от Irdis
если не ошибаюсь так
Код:
std::vector<int>::iterator channelIter = intVector.begin()
cout<< (int)(*channelIter);
Да, скомпилилась, но при работе вылетает с ошибкой.
На всякий случай, вот вся функция:
Код:
void del(){
int del_element;
system("cls");
printf("Enter del elemet:\n");
scanf_s("%d", &del_element);
for(vector<int>::iterator i = elements.begin(); i != elements.end(); i++){
if((int)(*i) == del_element){
elements.erase(i);
}
}
Методом поочерёдного исключения строк выяснил, что ошибку при выполнении вызывает строка:
Последний раз редактировалось VIP; 01.11.2009 в 17:47..
|
|
|

01.11.2009, 17:46
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами:
10386906
Репутация:
599
|
|
Код:
#include <iostream>
#include <vector>
#include <boost/bind.hpp>
#include <boost/foreach.hpp>
#include <functional>
#include <algorithm>
using namespace std;
int main()
{
vector<int> elements;
elements.push_back(1);
elements.push_back(2);
elements.push_back(3);
elements.push_back(4);
elements.push_back(5);
int del_element = 3;
cout << "before remove:";
BOOST_FOREACH(int val, elements) cout << " " << val;
vector <int>::iterator new_end = remove_if(elements.begin(), elements.end(),
boost::bind(std::equal_to<int>(), _1, del_element));
elements.erase (new_end, elements.end( ) );
cout << "\nafter remove: ";
BOOST_FOREACH(int val, elements) cout << " " << val;
cout << '\n';
system("pause");
}
вариант удаления юзая boost и stl(без циклов, описанных вручную, что имхо гораздо нагляднее и быстрее понимается).
Последний раз редактировалось Ra$cal; 01.11.2009 в 17:48..
|
|
|

01.11.2009, 17:49
|
|
Участник форума
Регистрация: 06.02.2006
Сообщений: 177
С нами:
10661593
Репутация:
88
|
|
нет с erase должно быть всё ок
ошибку в студию
|
|
|

01.11.2009, 17:54
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами:
10386906
Репутация:
599
|
|
с вектором кстати проще работать не через иетарторы, а через оператор [], как с обычным массивом.
Код:
for(int i = 0; i < elements.size(); i++){
if(elements[i] == del_element){
elements.erase(elements.begin() + i);
// важный момент. из-за удаления пропускаем одну запись, если не править i
i--;
}
}
Последний раз редактировалось Ra$cal; 01.11.2009 в 18:13..
|
|
|

01.11.2009, 17:57
|
|
Участник форума
Регистрация: 29.12.2004
Сообщений: 105
С нами:
11243422
Репутация:
21
|
|
Сообщение от Irdis
нет с erase должно быть всё ок
ошибку в студию
извиняюсь за принт-скрин, но думаю так будет точнее:

|
|
|

01.11.2009, 18:11
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами:
10386906
Репутация:
599
|
|
кстати, в примере с erase, который я привел, обязательно делай break после удаления элемента или делай декремент счетчика i, т.к. сбивается связь указателя и записей в векторе, можно проскочить запись после каждого удаления.
|
|
|

01.11.2009, 18:14
|
|
Участник форума
Регистрация: 29.12.2004
Сообщений: 105
С нами:
11243422
Репутация:
21
|
|
Сообщение от Ra$cal
кстати, в примере с erase, который я привел, обязательно делай break после удаления элемента или делай декремент счетчика i, т.к. сбивается связь указателя и записей в векторе, можно проскочить запись после каждого удаления.
Хорошо, спасибо за помощь и за подсказку! Учту. 
|
|
|
|
 |
|
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|