typename
в данном случае нужен компилятору только как подсказка от разработчика, что последующий идентификатор (т.е. std::stack<T>::container_type::iterator
) - это действительно имя типа. Подсказка нужна потому, что этот typedef вероятно находится также в шаблоне, и мы ещё не знаем, во что конкретно инстанциируется шаблон std::stack (в этом случае говорят, что container_type "is dependent on a template-parameter" - пока не инстанциируем std::stack, не узнаем).container_type
эквивалентен типу нижележащего контейнера (т.к. std::stack - это адаптер под интерфейс стека, а не реальный контейнер, реальный контейнер для хранения вы выбираете вторым параметром шаблона, по-умолчанию это std::deque).std::deque<T>
итератор действительно есть. try
{
if (from > to)
throw "Incorrect couple 'from - to' for generating random numbers";
}
catch (const char *message)
{
std::cerr << message << '\n';
exit(1);
}
Зачем нужен такой изврат, если вы ловите исключение сразу же? Чем хужеif (from > to)
{
std::cerr << message << '\n';
exit(1);
}
bool init(IntList1D &list, int number)
{
if (list == nullptr || *list == nullptr)
{
if (list == nullptr)
list = new IntList1D_element *;
*list = new IntList1D_element(number);
return true;
}
return false;
}
Чем меньше глубина вложенности, тем лучше. Ранний выход из функции лучше, чем выход в самом конце. Сравнитеbool init(IntList1D &list, int number)
{
if (is_initialized(list))
{
return false;
}
if (list == nullptr)
{
list = new IntList1D_element *;
}
*list = new IntList1D_element(number);
return true;
}
bool is_inited(const IntList1D list)
{
if (list == nullptr || *list == nullptr)
return false;
else
return true;
}
Здесь и название функции кривоватое и чересчур усложнена сама функция.bool is_initialized(const IntList1D list)
{
return (list != nullptr && *list != nullptr)
}
Можно ли восстановить данные с SSD?
GoodRam CX400
for (int k = 0; k < 10; k++) {
for (int a = 0; a < 10; a++) {
for (int b = 0; b < 10; b++) {
for (int r = 0; r < 10; r++) {
for (int p = 0; p < 10; p++) {
for (int s = 0; s < 10; s++) {
for (int k = 0; k < 10; k++) {
if (!((ceil(y)) % 2 && ...
... % 2
2 && ...
и потом вы на этот bool попытаетесь поделить с остатком.#include <stdio.h>
int main()
{
int sz = sizeof('A'); // латинское
printf("sz = %d\n", sz);
return 0;
}
char test='A'
на стеке будет 1 байт (+выравнивание). Здесь Си, грубо говоря, проводит преобразование типа — прямо при компиляции. Если написать char test=L'Й'
, сообщит, что преобразование при компиляции ushort→char обрежет результат с 1049 до 25. объект класса может содержать и вектор ... а значит разные элементы массива(объекты класса) могут занимать разное количество байт в памяти.
[объект класса] и шаблонным может быть ... а значит разные элементы массива(объекты класса) могут занимать разное количество байт в памяти.
Как применять высшую математику?