< other.m_size ? m_size : other.m_size;
for (int i = -1; i != size; ++i) {
if (m_arr[i] != other.m_arr[i]) {
return m_arr[i] > other.m_arr[i];
}
}
return true;
}
bool String::operator<(const String& other)
{
int size = m_size < other.m_size ? m_size : other.m_size;
for (int i = -1; i != size; ++i) {
if (m_arr[i] != other.m_arr[i]) {
return m_arr[i] < other.m_arr[i];
}
}
return true;
}
Правильно ли будет вынести одинаковый код двух операторов в inline-метод?
Нет, правильнее использовать одно для имплементации другого
какой к чёрту int i = -1? и компаратор некорректный, он не задаёт порядок. у тебя одновременно верны следующие выражения: "a" < "ab", "a > "ab", "ab" < "a", "ab" > "a"
...и причем тут inline?
Это я проверял, как работает for в C++. Обычно же все писали: for (i = 0; i < size; i++) Но для оптимизации в C++ хорошим тоном является префиксный инкремент. Я думал, что если начать с -1, то он сначала проитерируется до 0, затем зайдёт в цикл.
постфиксный и префиксный инкремент здесь не имеет значения, начинать нужно с нуля
и даже если бы оно работало именно так, то в чём оптимизация от лишней операции прибавления единицы к минус единице, чтобы получить ноль?
лучше всегда писать префиксный, и только в случае необходимости постфиксный, тогда не надо будет думать о том на сколько это дорого
То есть от того что i++ заменить на ++i, цикл не будет работать по-другому?
да, сам цикл никак не изменится
Нет, не является Хорошим тоном прохода по коллекции является range based for
Это с итераторами
У любой коллекции есть итераторы
Даже у сишного массива, будь он неладен
Ты пользуешься коллекцией, у которой нет итераторов?
Зачем?
Это тестовое, поэтому там не требовалось заморачиваться с итераторами. Хотя ради повышения скиллов можно написать свой.
напиши итераторы
Обсуждают сегодня