Перейти к содержимому

Empty c что это

  • автор:

Переменная = empty

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

29 апр 2017 в 12:01
Связанный вопрос: ru.stackoverflow.com/q/495895/176217
29 апр 2017 в 16:04

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

В дополнение к ответу выше, имеется еще boost::optional и boost::tribool . Простенькая реализация аналога optional пилится самостоятельно очень быстро.

Отслеживать
28.8k 12 12 золотых знаков 59 59 серебряных знаков 118 118 бронзовых знаков
ответ дан 28 апр 2017 в 18:20
Croessmah stands with Russia Croessmah stands with Russia
5,333 13 13 серебряных знаков 21 21 бронзовый знак

В C++ 17 имеется класс std::optional — обертка вокруг других объектов, который позволяет определять, есть ли значение у переменной или нет.

Однако многие компиляторы еще не поддерживают этот класс.

Поэтому для фундаментальных типов нет такого значения, как empty. Вы можете переменные этих типов инициализировать нулем, как это делает компилятор для статических переменных. Тем не менее нельзя сказать, что такие значения являются значением empty.

Использование функций STL stack::top и stack::empty в Visual C++

В этой статье показано, как использовать stack::top функции STL и stack::empty в Visual C++. Сведения, приведенные в этой статье, относятся только к неуправляемого кода Visual C++.

Исходная версия продукта: Visual C++
Оригинальный номер базы знаний: 158040

Обязательный заголовок

Прототип

template // Function 1 value_type &stack::top(); template // Function 2 const value_type &stack::top() const; template // Function 3 bool stack::empty() const; 

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

Описание функций stack::top и stack::empty

Функция top возвращает самый верхний элемент стека. Перед вызовом top функции убедитесь, что в стеке есть один или несколько элементов. Первая версия top функции возвращает ссылку на элемент в верхней части стека, что позволяет изменить значение. Вторая функция возвращает константную ссылку, гарантируя, что вы случайно не измените стек.

Функция empty возвращает значение true , если в стеке нет элементов. При наличии одного или нескольких элементов функция вернет значение false. Функцию следует использовать, empty чтобы убедиться, что в стеке остались элементы, прежде чем вызывать функцию top .

Пример кода

////////////////////////////////////////////////////////////////////// // Compile options needed: /GX // StackTop&Empty.cpp : Illustrates how to use the top function to // retrieve the last element of the controlled // sequence. It also illustrates how to use the // empty function to loop though the stack. // Functions: // top : returns the top element of the stack. // empty : returns true if the stack has 0 elements. // Copyright (c) 1996 Microsoft Corporation. All rights reserved. ////////////////////////////////////////////////////////////////////// #pragma warning(disable : 4786) #include #include #if _MSC_VER > 1020 // if VC++ version is > 4.2 using namespace std; // std c++ libs implemented in std #endif typedef stack> STACK_INT; void main() < STACK_INT stack1; cout // Repeat until stack is empty while (!stack1.empty()) // Function 3 < const int &t = stack1.top(); // Function 2 cout > 

Обратная связь

Были ли сведения на этой странице полезными?

empty

Используйте ClassName .empty создать массив 0 на 0 ClassName класс. Используйте ClassName .empty(m,0) создать m-0 массив ClassName класс. Эта функция полезна для создания пустых массивов типов данных, которые не имеют специального синтаксиса для создания пустых массивов, таких как [] для двойных массивов.

A = ClassName.empty возвращает пустой массив 0 на 0 класса, названного ClassName . Замените ClassName с подлинным именем класса.

A = ClassName.empty( sz1. szN ) возвращает пустой массив с заданными измерениями. По крайней мере одна из размерностей должна быть 0.

A = ClassName.empty( sizeVector ) возвращает пустой массив с заданными измерениями. По крайней мере одна из размерностей должна быть 0. Используйте этот синтаксис, чтобы задать пустой массив, который одного размера с существующим пустым массивом. Передайте значения, возвращенные size функционируйте как входные параметры.

Примеры

Создайте пустой символьный массив

В этом примере показано, как создать пустой символьный массив с помощью размерностей по умолчанию, 0 на 0.

A = char.empty
A = 0x0 empty char array

Пустой int16 Массив с Ненулевой Размерностью

В этом примере показано, как создать пустой int16 массив с ненулевыми размерностями. Задайте 5 0 размерности как входные параметры к empty метод.

Aint = int16.empty(5,0)
Aint = 5x0 empty int16 matrix

Используйте размер существующего массива

Используйте размер существующего пустого массива, чтобы создать массив, одного размера.

Aint = int16.empty(5,0); Bdouble = double.empty(size(Aint))
Bdouble = 5x0 empty double matrix

Входные параметры

sz1. szN — Размерности массива
0 (значений по умолчанию) | целые числа

Размерности массива в виде целых чисел. По крайней мере одной размерностью должен быть 0 . Отрицательные величины обработаны как 0 . Последующие измерения 1 не включены в размер массива

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

sizeVector — Вектор из размерностей
0 (значений по умолчанию) | вектор-строка

Вектор из размерностей в виде вектора-строки из неотрицательных целых чисел. По крайней мере одним элементом должен быть 0 . Отрицательные величины обработаны как 0 .

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Выходные аргументы

A — Пустой массив
пустой массив

Пустой массив, возвращенный как пустой массив заданных измерений и класса, используется в вызове метода.

Больше о

Класс массива пустого объекта

empty метод позволяет вам инициализировать массивы определенного класса:

C = char.empty(0,7) C = Empty matrix: 0-by-7 disp(class(C)) char

Инициализация массива с пустыми скобками ( [] ) производит пустой массив класса double :

disp(class(a)) double

Можно инициализировать пустой массив пользовательского класса. Например, пустой статический метод является скрытым методом RGBColor класс задан здесь.

classdef ColorInRGB properties Color (1,3) = [1,0,0]; end methods function obj = ColorInRGB(c) if nargin > 0 obj.Color = c; end end end end

Создать пустое 0 5 массив класса ColorInRGB , вызовите пустой метод:

A = ColorInRGB.empty(0,5);

Идентифицируйте пустые массивы

Можно использовать isempty , size , и length функции, чтобы идентифицировать массивы пустого объекта. Например, создайте пустой массив ColorInRGB класс задан в предыдущем разделе.

A = ColorInRGB.empty(0,5); isempty(A)
ans = logical 1
size(A)
ans = 0 5
length(A)
ans = 0

Конкатенация и индексация пустых массивов

Пустые массивы следуют за поведением конкатенации массивов. Например, создайте пустой массив ColorInRGB класс задан в предыдущем разделе и для нового массива путем конкатенации экземпляров в другой массив.

A = ColorInRGB.empty(0,5); B = [A A]
B = 0×10 ColorInRGB array with properties: Color

Вы не можете индексировать в пустой массив.

Index in position 1 is invalid. Array indices must be positive integers or logical values.

Советы

  • empty скрытый, общедоступный, статический метод всего неабстрактного MATLAB ® классы. Можно заменить empty метод в определениях классов.

Смотрите также

Темы

Введенный в R2008a

Открытый пример

У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?

Документация MATLAB

Поддержка

  • MATLAB Answers
  • Помощь в установке
  • Отчеты об ошибках
  • Требования к продукту
  • Загрузка программного обеспечения

© 1994-2021 The MathWorks, Inc.

  • Условия использования
  • Патенты
  • Торговые марки
  • Список благодарностей

Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика

1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.

2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.

3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.

4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.

5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.

empty

Проверяет, считается ли переменная пустой. Переменная считается пустой, если она не существует или её значение равно false . Языковая конструкция empty() не генерирует предупреждение, если переменная не существует.

Список параметров

Если переменная не существует, предупреждение не генерируется. То есть конструкция empty() — это краткий эквивалент конструкции !isset($var) || $var == false.

Возвращаемые значения

Возвращает true , если переданная в параметр var переменная не существует, содержит пустое значение или равно нулю, то есть ложно, подробнее о приведении значений к булевым типам рассказано в параграфе преобразование в логический тип. В остальных случаях возвращает false .

Примеры

Пример #1 Простое сравнение языковых конструкций empty() и isset() .

// Принимает значение true, потому что переменная $var содержит пустое значение
if (empty( $var )) echo ‘$var или 0, или пусто, или вообще не определена’ ;
>

// Принимает значение true, потому что переменная $var определена
if (isset( $var )) echo ‘$var определена, даже если она пустая’ ;
>
?>

Пример #2 Конструкция empty() и строковые индексы

$expected_array_got_string = ‘somestring’ ;
var_dump (empty( $expected_array_got_string [ ‘some_key’ ]));
var_dump (empty( $expected_array_got_string [ 0 ]));
var_dump (empty( $expected_array_got_string [ ‘0’ ]));
var_dump (empty( $expected_array_got_string [ 0.5 ]));
var_dump (empty( $expected_array_got_string [ ‘0.5’ ]));
var_dump (empty( $expected_array_got_string [ ‘0 Mostel’ ]));
?>

Результат выполнения этого примера:

bool(true) bool(false) bool(false) bool(false) bool(true) bool(true)

Примечания

Замечание: Поскольку это языковая конструкция, а не функция, её нельзя вызывать как переменную функцию или передавать как именованный аргумент.

Замечание:

При вызове языковой конструкции empty() на недоступных (необъявленных, защищённых или закрытых) свойствах объекта вызывается метод перегрузки — __isset(), если он определён.

Смотрите также

  • isset() — Определяет, была ли установлена переменная значением, отличным от null
  • __isset()
  • unset() — Удаляет переменную
  • array_key_exists() — Проверяет, присутствует ли в массиве указанный ключ или индекс
  • count() — Подсчитывает количество элементов массива или Countable объекте
  • strlen() — Возвращает длину строки
  • Таблица сравнения типов

User Contributed Notes 36 notes

9 years ago

$testCase = array(
1 => » ,
2 => «» ,
3 => null ,
4 => array(),
5 => FALSE ,
6 => NULL ,
7 => ‘0’ ,
8 => 0 ,

foreach ( $testCase as $k => $v ) if (empty( $v )) echo »
$k => $v is empty» ;
>
>
/**
Output
1=> is empty
2=> is empty
3=> is empty
4=>Array is empty
5=> is empty
6=> is empty
7=>0 is empty
8=>0 is empty
**/
?>

14 years ago

Please note that results of empty() when called on non-existing / non-public variables of a class are a bit confusing if using magic method __get (as previously mentioned by nahpeps at gmx dot de). Consider this example:

class Registry
protected $_items = array();
public function __set ( $key , $value )
$this -> _items [ $key ] = $value ;
>
public function __get ( $key )
if (isset( $this -> _items [ $key ])) return $this -> _items [ $key ];
> else return null ;
>
>
>

$registry = new Registry ();
$registry -> empty = » ;
$registry -> notEmpty = ‘not empty’ ;

var_dump (empty( $registry -> notExisting )); // true, so far so good
var_dump (empty( $registry -> empty )); // true, so far so good
var_dump (empty( $registry -> notEmpty )); // true, .. say what?
$tmp = $registry -> notEmpty ;
var_dump (empty( $tmp )); // false as expected
?>

The result for empty($registry->notEmpty) is a bit unexpeced as the value is obviously set and non-empty. This is due to the fact that the empty() function uses __isset() magic functin in these cases. Although it’s noted in the documentation above, I think it’s worth mentioning in more detail as the behaviour is not straightforward. In order to achieve desired (expexted?) results, you need to add __isset() magic function to your class:

class Registry
protected $_items = array();
public function __set ( $key , $value )
$this -> _items [ $key ] = $value ;
>
public function __get ( $key )
if (isset( $this -> _items [ $key ])) return $this -> _items [ $key ];
> else return null ;
>
>
public function __isset ( $key )
if (isset( $this -> _items [ $key ])) return ( false === empty( $this -> _items [ $key ]));
> else return null ;
>
>
>

$registry = new Registry ();
$registry -> empty = » ;
$registry -> notEmpty = ‘not empty’ ;

var_dump (empty( $registry -> notExisting )); // true, so far so good
var_dump (empty( $registry -> empty )); // true, so far so good
var_dump (empty( $registry -> notEmpty )); // false, finally!
?>

It actually seems that empty() is returning negation of the __isset() magic function result, hence the negation of the empty() result in the __isset() function above.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *