Вы хотят сравнить число с его реверсом, это может быть быстрее для инвертирования подразделения использования числа вместо того, чтобы преобразовать его в строку. Я все еще должен протестировать скорость его.
private static int Reverse(int num) {
int res = 0;
while (num > 0) {
int rm ;
num = Math.DivRem(num, 10, out rm);
res = res * 10 + rm;
}
return res;
}
РЕДАКТИРОВАНИЕ: DivRem был приблизительно на 1% быстрее, чем подразделение и модуль в моем компьютере. Оптимизация скорости является выходом, если последняя цифра 0:
private static int Reverse(int num) {
int res = 0;
int rm;
num = Math.DivRem(num, 10, out rm);
//Some magic value or return false, see below.
if (rm == 0) return -1 ;
res = res * 10 + rm;
while (num > 0) {
num = Math.DivRem(num, 10, out rm);
res = res * 10 + rm;
}
return res ;
}
Создание метода возвратить bool было немного медленнее, чем по сравнению с bool в цикле в моем компьютере, но я не понимаю почему. Протестируйте в своем компьютере.
Умножение и бит-shifing должны быть быстрее, чем подразделение, но вероятно не достаточно точны.Править: использование долго кажется быть достаточно точным.
private static int FastReverse(int num) {
int res = 0;
int q = (int)((214748365L * num) >> 31);
int rm = num - 10 * q;
num = q;
if (rm == 0) return -1;
res = res * 10 + rm;
while (num > 0) {
q = (int)((214748365L * num) >> 31);
rm = num - 10 * q;
num = q;
res = res * 10 + rm;
}
return res;
}
(214748365L * цифра)>> 31 равно мне / 10 до 1,073,741,829, где 1 / 10 дает 107374182 и умножение +, двоичное смещение дает 107374183.
Вместо создания нового действия просто получите действие из самого QDockWidget и используйте его. Он позаботится о состоянии за вас:
http://qt-project.org/doc/qt-4.8/qdockwidget.html#toggleViewAction
QAction * QDockWidget :: toggleViewAction () const
" Возвращает проверяемое действие, которое можно использовать для отображения или закрытия этого закрепляемого виджета.
Текст действия устанавливается равным заголовку окна закрепляемого виджета. "