2013-04-07 81 views

回答

6

您可以使用std::beginstd::end,如果你有C++ 11的支持:

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

+5

或'std :: extent :: value'。 – 2013-04-07 09:59:32

+0

@sftrabbit我甚至没有想到那个。太好了! – juanchopanza 2013-04-07 10:01:43

+1

@sftrabbit Make ** that **答案并获得我的+1 – 2013-04-07 10:02:25

4

使用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是文档。考虑基于范围的示例。

+0

是否可以使用initializiton定义一个'std :: vector'(就像我在普通数组中的例子)? – NPS 2013-04-07 10:04:46

+1

C++ 11版本初始化器。否则,你可以像你一样创建一个数组,并将其分配给std :: vector。我在一分钟后发布文档 – 2013-04-07 10:09:59

+0

这个C级别的表达不应该建议没有解释[其类型不安全和如何可以补救](http://stackoverflow.com/questions/4810664/how-do-i-use-阵列式-C/7439261#7439261)。 – 2013-04-07 10:12:57

2

像这样:

int size = sizeof(array)/sizeof(array[0]) 
+0

我知道这个,但我认为它可能不适用于'std :: string'(由于可变的文本长度)。 – NPS 2013-04-07 10:02:59

+2

这个C级别的表达不应该建议没有解释[其类型不安全和如何可以补救](http://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c/7439261 #7439261)。 – 2013-04-07 10:18:01

+0

@NPS'sizeof(std :: string)'总是一样的;它与字符串中存储了多少个字符没有任何关系 – 2014-09-27 03:44:16

3

C++ 11提供std::extent它给你沿着阵列的第N维中的元素的数量。默认情况下,N为0,因此它给出了阵列的长度:

std::extent<decltype(array)>::value 
+0

它是否在编译时进行所有计算(即编译后它只是一个数字,不需要额外的计算)? – NPS 2013-04-07 10:13:15

+0

@NPS:是的,你可以看到,它是一种类型 – 2013-04-07 10:15:08

+0

任何使它变短的方法(如宏,但我宁愿不使用宏)? – NPS 2013-04-07 10:31:31