LINUX.ORG.RU

Список указателей, поиск по значению

 , c++03,


1

6

Привет. Есть такой список:

class A;
std::list<A*> myList;

Какие есть способы организовать поиск по значению? Пока что я пришёл только к этому:

A searchValue;
std::list<A*>::const_iterator iter;
for (iter = myList.begin(); iter != myList.end(); ++iter) {
   if (**iter == searchValue) break;
}
return *iter;

★★★★★

Последнее исправление: UVV (всего исправлений: 1)
Ответ на: комментарий от invy

А микрокод вокруг перемычек и вентилей)

pylin ★★★★★
()
Ответ на: комментарий от anonymous

Понятие высокий-низкий уровень относительно.

invy ★★★★★
()
Ответ на: комментарий от NegatiV

Еще бы хотелось увидеть семантический эквивалент на С, раз уж ты сказал что С++

ты сначала погугли, что такое «семантика», а потом объясни смысл того, что ты наваял. тогда тебе и эквивалент на си напишем

ИЛИ сообрази-ка на своих высокоуровневых плюсах семантический эквивалент вот этого:

--[+++++++<---->>-->+>+>+<<<<]
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.

А то define'ами class на struct менять в хелловорлдах все могут

А то интерпретатор брейнфака на асм++ наваять все могут

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от nanoolinux

я про с++11 слыхом не слыхивал, про с++14 - тем паче. можно линк?

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

Думаю прекрасно понятно что я имел в виду под «логический эквивалент». =) По поводу тех new/delete: шла речь что C++ лишь «сахар», т.е. просто дополнение к С. Вот я и прошу продемонстрировать как в С запретить создание объекта на куче и заставить компилятор автоматически создать для него дефолтный конструктор.

NegatiV
()
Последнее исправление: NegatiV (всего исправлений: 1)
Ответ на: комментарий от NegatiV

как в С запретить создание объекта на куче

зачем? чтобы не выстрелить себе в ногу?

тогда первый шаг - выкинуть плюсы вместе с pure C

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от MyTrooName

А почему бы не использовать такие средства? Есть возможность не выстрелить себе в ногу? Отлично! Тем более, имхо, на любом языке можно выстрелить себе в ногу, где-то больше, где-то меньше. Если в С++ таких возможностей становится меньше то это однозначно положительный момент.

NegatiV
()
Ответ на: комментарий от NegatiV

Получается, это схх-специфичный костыль, который в сишечке не нужен, потому что не нужен. Какой тогда семантический или логический аналог ты хочешь увидеть?

Вообще, имхо странно запрещать выделять память в куче. Это как, например, запретить цикл for, разрешить только while.Чтобы меньше возможностей выстрелить себе в ногу было:

for(int i = 0; ++i; i < n)

Есть возможность не выстрелить себе в ногу? Отлично!

предлагаю не заклеивать курок пластилином, а использовать оружие с предохранителем.

Если в С++ таких возможностей становится меньше то это однозначно положительный момент

... положительный момент по сравнию с такой же прогой на С++, но без костылей. допустим, найден способ избежать в плюсах плюсовой же проблемы. как это делает плюсы уровнем выше по сравнению с си?

на си, конечно, тоже есть malloc, но он не включает в себя инициализацию. т.о. malloc с точки зрения объекта^Wструктуры ничем не отличается от глобальной или локальной переменной. запрещать malloc для данной структуры, во-первых, бесполезно, во-вторых, не нужно. тем не менее,

struct A { int x };
struct A* A_malloc() {
    fail();
}
void A_call(struct A* this) {
    printf("...");
}

это обеспечит ровно такую же (никакую) защиту от malloc-а, как и приведенный тобой код на плюсах - от new. вся разница - в небольшом количестве сахара

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

Вообще, имхо странно запрещать выделять память в куче. Это как, например, запретить цикл for, разрешить только while.

void Class::sync() {
    CriticalSection cs(this->mutex); // CriticalSection размещать на куче не имеет смысла, да и опасно в случае утери указателя
    ...
}

положительный момент по сравнию с такой же прогой на С++, но без костылей. допустим, найден способ избежать в плюсах плюсовой же проблемы. как это делает плюсы уровнем выше по сравнению с си?

В C RAII приходится городить самому, в С++ он «из коробки» и обвешан всякими ништяками. Итого имеем: С++ умеет и RAII, и все что умеет С. Вывод: С++ уровнем выше чем С.

NegatiV
()
Ответ на: комментарий от NegatiV

CriticalSection

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

в С++ он «из коробки» и обвешан всякими ништяками

расскажи плз про эти ништяки, а то я слыхал только про проблемы с исключениями в constr/destr и с отложенной инициализацией

Вывод: С++ уровнем выше чем С.

согласен. а fasm уровнем выше, чем tasm. но проводить границу термина «высокоуровневый» между С и С++ благодаря паре сомнительно спроектированных фич - цитируя авторитетный источник, «маразм»

MyTrooName ★★★★★
()

я точно не помню, но вроде в бусте есть спец контейнеры чтобы хранить указатели

Vernat ★★
()
Ответ на: комментарий от hateyoufeel

Я курсовые в университете в таким стиле писал

qulinxao так посты на ЛОР пишет. К большому сожалению, список define'ов он держит в секрете.

buddhist ★★★★★
()
7 ноября 2014 г.

Какие есть способы организовать поиск по значению?

Замутить свой итератор, который будет извлекать данные по значению.

Если надо только один раз - то, как уже советовали find_if

no-such-file ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.