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)

Ответ на: комментарий от UVV

Можно еще лямбду на бинд попробовать заменить, но не думаю, что это добавит читабельности.

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

Проект пока не на нём. Как переведём на 11-ый, так проблем не будет.

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

Так с этим-то проблем не должно быть, просто предикат там унарынй.

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

любые сложные конструкции в любом высокоуровневом языке походят на брейнфак :-)

В том-то и дело, что в крестах простая лямбда выглядит как «сложная конструкция».

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

Называть C++ высокоуровневым в 2014 году

Стесняюсь спросить, а высокоуровневее это жабка с решёточкой?

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

Стесняюсь спросить, а высокоуровневее это жабка с решёточкой?

Не стесняйся, спрашивай :)

C++ нельзя назвать высокоуровневым не потому что в нём есть указатели с прямым доступом к памяти и прочие крайне низкоуровневые штуки, а потому что без этих штук на C++ хрен что напишешь. Плюс традиционное «human-compiler at work» - в смысле, абсолютная нерасширяемость языка. Но мы ведь все не за это плюсы любим, так?

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

абсолютная нерасширяемость языка.

Чтоа? Покажи расширяемость. В C++ она хоть и хреновая, но есть.

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

Чтоа? Покажи расширяемость. В C++ она хоть и хреновая, но есть.

Нет, в плюсах её нет вообще. Сравни темплейты в плюсах и, например, в хаскелле.

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

Щас тебе скажут, что кресты с хаскелем сравнивать некорректно, потому что кококо-ООП.

Хотя как раз в хаскеле и сделано вменяемое ООП на тайпклассах. И метазадачу он ту же самую решает: развитие выразительных возможностей языка через статическую типизацию. (И решает её правильно, в отличие от крестов.)

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

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

Хотя как раз в хаскеле и сделано вменяемое ООП на тайпклассах.

Что это за бред? Тайпклассы дают вменяемый полиморфизм, к ООП это отношения практически не имеет.

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

Опять же нет, хотя Страуструп в последнее время начинает осознавать свои ошибки. Вон даже библиотеку для паттерн матчинга на темплейтах запилил. Кривую, правда, и медленную, но всё же.

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

Называть C++ высокоуровневым в 2014 году - это, как минимум, моветон, как максимум - признак маразма.

C++ - высокоуровневый. С - нет. Считай меня маразматиком :-)

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

Что это за бред? Тайпклассы дают вменяемый полиморфизм, к ООП это отношения практически не имеет.

А в ООП и нет по существу идей, кроме полиморфизма. Остальное баззворды.

Поэтому «Тайпклассы дают вменяемый полиморфизм» выражает всю суть.

Опять же нет

Ну ак чему мы приходим, если возьмём абстрактный процедурный язык и начнём последовательно гнуть его в сторону статической типизации? Суть статической типизации в том, что программист на основе известного компилятору набора лексических примитивов, пытается объяснить СМЫСЛ КОДА, таким образом, чтобы компилятор в рамках описанной ему предметной области мог отличать корректный код от некорректного. И двигаясь в этом направлении мы приходим к необходимость объяснить компилятору внешние эффекты, порождаемые программой, и то, как эти эффекты комбинируются. А здесь уже рукой подать до идеи тайпклассов, и, как частного случая, монад, а также сахара над монадами.

То есть, на мой взгляд, вся история C++ — это попытка изобрести хаскель в синтаксисе Си.

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

C++ - высокоуровневый. С - нет. Считай меня маразматиком :-)

Может быть, ты сможешь рассказать, что именно высокоуровневого включает в себя C++, но не включает C?

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

вся история C++ после C99 — это попытка изобрести хаскель в синтаксисе Си.

Плюсану пожалуй пофикшенную на мой взгляд версию высказывания

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

буду краток - ООП

В C++ крайне грязная и неуклюжая реализация ООП, которая по сути лишь добавляет синтаксический сахар вокруг struct и, опционально, таблицу виртуальных методов. Разве это высокий уровень?

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

Делаю ставку, что через пару лет можно будет делать вот так:

#include <functional>
#include <cstdio>

using namespace std;

int f(const function <void ()> &t)
{
  t();
}

int main()
{
  f( (class { public: void operator ()() {puts("mememe");}};){});
}

Но не потому-что кто-то там не освоит лямбд, а потому что язык станет ещё более упоротым, чем сейчас. Ну и баян про

auto auto(auto) {auto;}
никто не отменял))

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

В C++ крайне грязная и неуклюжая реализация ООП, которая по сути лишь добавляет синтаксический сахар вокруг struct и, опционально, таблицу виртуальных методов. Разве это высокий уровень?

Тонкости реализации не имеют никакого отношения к уровневости языка.

Поясню: «Если что-то выглядит как утка, крякает как утка и ведет себя как утка, то это скорее всего утка». То что она, возможно, хромая и плохо летает - не отменяет того факта что это - утка.

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

> вся история C++ после C99 — это попытка изобрести хаскель в синтаксисе Си.

Плюсану пожалуй пофикшенную на мой взгляд версию высказывания

Это после того, как мужики поняли, что ад-хок полиморфизм на таблицах указателей в общем случае немножко не тянет на серебряную пулю.

Но т.к. Си-подобный синтаксис не очень-то расширяем, результат внешне всё больше походит на брейнфак.

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

Вот кстати насчет ООП, я тут недавно наткнулся на весьма короткий и дельный кусочек:

OOP didn’t quite turn out to be what Alan Kay had in mind when he coined the term. His vision was primarily message passing, and he wanted to get rid of data (he viewed systems to be built using messages that are passed between biological cell-like objects that performed operations but did not hold any state). Somewhere along the way, OO languages started down the path of data hiding through Abstract Data Types (ADTs), binding data with procedure or combining state and behavior. [...]

В общем, как обычно, было ооп на сообщениях, а теперь Три Кита.

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

Поясню: «Если что-то выглядит как утка, крякает как утка и ведет себя как утка, то это скорее всего утка». То что она, возможно, хромая и плохо летает - не отменяет того факта что это - утка.

Если уж с этой стороны, то ООП в C++ на собственно ООП походит только названием. Сравни Smalltalk или CLOS или хотя бы Ruby и C++.

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

буду краток - ООП

Омг, неосиляторы структур с указателями на ф-ии в треде. Правильный ответ - raii. Это реально то, чего нет в С. Даже ексепшены по сути сахар вокруг setjmp.

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

Давайте не будем скатываться в срач фразами «закукарекать». Мне, например, интересно послушать мнение местных аналитиков о более ООП-шных языках :-)

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

In computer science, a high-level programming language is a programming language with strong abstraction from the details of the computer.

что, из крестов наконец-то выкинули указатели?

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

Сравни Smalltalk или CLOS или хотя бы Ruby и C++.

А почему «хотя бы»? Чем принципиально message passing в Ruby отличается от Smalltalk, если не принимать во внимание разный синтаксис?

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

Поддержка ООП к уровню языка не имеет отношения. Уровень языка - это абстракция от железа. Правда, как правило, именно за счет поддержки той или иной паражигмы это и достигается, например, декларативные языки признаются более высокоуровненвыми, чем ООП. Но в твоем случае у С++ тот же набор возможностей для дерганья указателей на указатели, что и у си (а еще сылки!).

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

Оба правы, и raii и oop отличает с++ от с. В связи с этим методы программирования разные.

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

Ты опоздал. Ответ в первом посте. Все, что ниже - свеженький крестосрачик!

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

Да, согласен, про эрланг надо было мелким шрифтом добавить. Но согласиль, ссылка в общем-то по делу.

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

А как народ обходится без указателей? Типа в других платформах/языках garbage collector идеальный? Или они просто не подходят для низкоуровневых задач?

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