std::string array[] = { "one", "two", "three" };
Как узнать длину array
в коде?Как узнать длину массива?
std::string array[] = { "one", "two", "three" };
Как узнать длину array
в коде?Как узнать длину массива?
Вы можете использовать std::begin
и std::end
, если у вас есть 11 поддержка C++ .:
int len = std::end(array)-std::begin(array);
// or std::distance(std::begin(array, std::end(array));
В качестве альтернативы, вы пишете собственную функцию шаблона:
template< class T, size_t N >
size_t size(const T (&)[N])
{
return N;
}
size_t len = size(array);
Это будет работать в C + +03. Если бы вы использовали его на C++ 11, то стоило бы сделать его constexpr
.
Используйте sizeof()
-оператора как в
int size = sizeof(array)/sizeof(array[0]);
или лучше использовать std::vector
, поскольку он предлагает std::vector::size()
.
int myints[] = {16,2,77,29};
std::vector<int> fifth (myints, myints + sizeof(myints)/sizeof(int));
Here является документом. Рассмотрим пример на основе диапазона.
Можно ли определить 'std :: vector' с initializaiton (как в моем примере с обычным массивом)? – NPS
C++ 11 предлагает инициализаторы. В противном случае вы можете создать массив, как вы это делали, и назначить его std :: vector. Ill post the doc за минуту –
Это выражение уровня C не следует рекомендовать, не объясняя [его тип небезопасности и как это можно исправить] (http://stackoverflow.com/questions/4810664/how-do-i-use- массивы-в-с/7439261 # 7439261). –
Как это:
int size = sizeof(array)/sizeof(array[0])
Я знал это, но я думал, что это может не работать с 'std :: string' (из-за переменной длины текста). – NPS
Это выражение уровня C не следует рекомендовать, не объясняя [его тип небезопасности и как это можно исправить] (http://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c/7439261 # 7439261). –
@NPS 'sizeof (std :: string)' всегда одно и то же; это не имеет никакого отношения к тому, сколько символов хранится в строке –
C++ 11 предоставляет std::extent
, который дает вам количество элементов вдоль N
го измерения массива. По умолчанию N
является 0, так что это дает вам длину массива:
std::extent<decltype(array)>::value
Выполняет ли это все вычисления во время компиляции (т. е. после компиляции это просто число, не требующее дополнительных вычислений)? – NPS
@NPS: да, вы можете видеть это из-за того, что это тип –
Любой способ сделать его коротким (например, макросом, но я бы не использовал макросы)? – NPS
Или 'станд :: степень :: value'. –
@ sftrabbit Я даже не думал об этом. Ницца! – juanchopanza
@sftrabbit Сделайте **, что ** ответ и получите мой +1 –