Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

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

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

01.11.2009, 17:18
|
|
Участник форума
Регистрация: 06.02.2006
Сообщений: 177
Провел на форуме: 1576821
Репутация:
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
Провел на форуме: 89596
Репутация:
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
Провел на форуме: 1354067
Репутация:
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
Провел на форуме: 1576821
Репутация:
88
|
|
нет с erase должно быть всё ок
ошибку в студию
|
|
|

01.11.2009, 17:54
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
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
Провел на форуме: 89596
Репутация:
21
|
|
Сообщение от Irdis
нет с erase должно быть всё ок
ошибку в студию
извиняюсь за принт-скрин, но думаю так будет точнее:

|
|
|

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

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