Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, enzo, Вы писали:
S>>> надо ещё сделать проверку на присваивание самому себе: E>>Во-первых, эту проверку следует делать всегда, независимо от типа возвращаемого значения. LM>Тут уже показывали фокус со swap. И никаких проверок не нужнл
T& T::operator = (const T& x)
{
T tmp(x); // Copy constructorthis->swap(tmp); // NO EXCEPTIONS !!!return *this;
}//T::copy operator
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, Hottabych1, Вы писали:
LM>>>Слив защитан. map всегда отсортирован H>>Ага, глянул в доку и увидел, что map всегда сортирован, но было поздно — уже ответил :) LM>Еще один воспрос: даны std::vector<int> и std::list<int>
LM>Как наиболее быстрым способом найти в них число 10? Сколько операций для этого потребуется О?
LM>P.S. В доку не смотреть LM>P.S.S. Рассмотреть оба случая: контейнеры сортированы\несортированы
так, в доки не смотрим... :)
несортированы: одинаково для vector и list: find (i->start (), i->end (), 10) , O(n)
сортированы:
вектор: O (log_2(n)), методом деления вектора пополам (код очевиден, в стандартных алгоритмах не помню, наверно, есть)
list: O (n), тупым перебором, например, find
Здравствуйте, THESERG, Вы писали:
THE>Здравствуйте, LuciferMoscow, Вы писали:
LM>>Здравствуйте, Hottabych1, Вы писали:
LM>>>>Слив защитан. map всегда отсортирован H>>>Ага, глянул в доку и увидел, что map всегда сортирован, но было поздно — уже ответил LM>>Еще один воспрос: даны std::vector<int> и std::list<int>
LM>>Как наиболее быстрым способом найти в них число 10? Сколько операций для этого потребуется О?
LM>>P.S. В доку не смотреть LM>>P.S.S. Рассмотреть оба случая: контейнеры сортированы\несортированы
THE>так, в доки не смотрим... THE>несортированы: одинаково для vector и list: find (i->start (), i->end (), 10) , O(n) THE>сортированы: THE>вектор: O (log_2(n)), методом деления вектора пополам (код очевиден, в стандартных алгоритмах не помню, наверно, есть) THE>list: O (n), тупым перебором, например, find
Поддерживаю и в доки тоже не смотрю.
Здравствуйте, Hottabych1, Вы писали:
H>Конечно же, виноват и все такое. Но разве так уж важно, что я не могу с ходу написать конструктор копирования? Ведь...
А не напрягайся. Вдиимо — для данной конкретной компании важно. Ибо они тут заказывают музыку.
Если ты считаешь, что это не важно — ищи другую компанию, в которой считают так же как ты. Лучше сработаетесь Меньше шансов взаимонепонимания в дальнейшей работе
Здравствуйте, jazzer, Вы писали:
J>Конструктор копирования — это конструктор с одним параметром-ссылкой на тот же самый класс. J>Константная это ссылка или нет — не важно.
Более того, передача по значению в конструкторе — это по сингнатуре тоже конструктор копирования! Просто так уж получилось в результате всех этих извилистых путей дизайна языка, что он приводит к бесконечной рекурсии. Типичный случай наступания себе на хвост.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, Hottabych1, Вы писали:
H>В пятницу был в одной очень солидной фирме. Когда шел — меня предупреждали, что собеседование длится по несколько часов. Однако я умудрился его завалить за 10 минут . Как? Очень просто — нервы + забыл элементарную вещь. H>Первый вопрос был написать класс и наследуемый от него. Сделал. Второй вопрос — про приведение типов. Ответил. Третий вопрос был фатальным. Угадайте, какой... написать для данного класса конструктор копирования. Ну забыл я, забыл! H>Написал дрожащими руками вот такое:
H>
H>A::A(A a)
H>{
H>...
H>}
H>
H>Конечно же, виноват и все такое. Но разве так уж важно, что я не могу с ходу написать конструктор копирования? Ведь достаточно потратить 30 сек времени, чтобы узнать, как это записывается. Ведь умение-неумение записать ту или иную конструкцию на языке программирования еще не говорит о том, что я не умею программировать, не умею решать задачи. Потому что синтаксические правила языка узнаются за ничтожное время и, на мой взгляд, гораздо важнее посмотреть, как соискатель будет вести себя при решении каких-либо необычных задач, как у него работает именно мозг, а не память. Каково ваше мнение?
Базовые моменты: написание конструктора копирования, перегрузку операций, etc
конечно надо знать и главное — понимать.Но ИМХО — работодателю стоит ещё и оценить, как человек
мыслит, подходит к решению задачи.Может быть в одном и проиграет, зато выиграет в другом.
Здравствуйте, branco, Вы писали:
B>Базовые моменты: написание конструктора копирования, перегрузку операций, etc B>конечно надо знать и главное — понимать.Но ИМХО — работодателю стоит ещё и оценить, как человек B>мыслит, подходит к решению задачи.Может быть в одном и проиграет, зато выиграет в другом.
А если нужен senior?
Здравствуйте, DKM_MSFT, Вы писали:
DKM>Здравствуйте, 0xd34df00d, Вы писали:
0>>>>А по-моему, есть вещи, которые нельзя забывать никогда, как таблицу умножения... А еще есть вещи, говорящие о непонимании практически базовых концепций и принципов. И соискатель, может быть, прав в данной ситуации — ему нужно получить наиболее хорошо знающего работника.
DKM>У меня как-то был период, когда мне, в силу специфики проекта, приходилось писать код на 5 разных языках. Так я иногда синтаксис цикла for забывал для какого-нибудь языка, не говоря уже про более сложные вещи. Цикл for — это, вроде как, базовая концепция. Говорит ли это о том, что я ее не понимаю и мне пора на свалку?
Как сказал коллега — есть 2 типа программистов — одни знают всю теорию, другие ничего не помнят, смотрят как написано другими (или собой же ранее) и адаптируют конструкцию. Не факт, что вторые не имеют права на существование.
Любой язык забывается очень быстро при неиспользовании. Для второй категории написать что-нибудь внятное вне привычной среды (на бумажке) вообще пытке подобно (еще + нервы)- и выходят неуклюжие .... класс А фигурная скобка — молчание — ерзание ручкой — и какой нафиг конструктор копирования.
Зато механическая память (открывание файла предыдущего проекта, где был использован данный прием, контрол-пробел в "студии", позвлояющий дописать оператор, мастеры-визарда вполне позволяют им творить.
Естественно, на теоретических собеседованиях вторая группа бракуется и идет в отстой.
а я както завалил (один из провальных ответов) по другой причине связаной с ООП. я совсем забыл, что по умолчанию не только деструктор и конструктор без параметров создаются. просто вот както в жизни привык не доверять таким вот "по умолчанию" методам. привык описывать, если они нужны, "ручками".
..за привычку поплатился как говорится
ЗЫ: конечно, порой выводит из себя, что собеседуют по таким вещам, которые применяешь, но теорию по ним рассказать толком не можешь только на пальцах.. но сие похоже только моя проблема.
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Здравствуйте, minorlogic, Вы писали:
M>>Почему воторой вариант лучше
КД>Курите тему исключений и атомарного перевода объекта из одного состояния в другое.
Это вы мне решили викторину организовать ? при чем тут атомарность , при чем тут исключения ? Вопрос был довольно конкретным.
M>>и что делает функция swap ?
КД>Обмен состояний объектов. Типа std::swap, но в рамках конкретного класса.