如何对字符串数组中的字符串数量求和,而未明确定义它需要多少个元素?
string str[] = { "astring", "bstring", "cstring", "dstring", "zstring" };
需要找出数组有多少个元素?
template< typename T, size_t N >
/*constexpr*/ size_t size( T(&arr)[N]) )
{
return N;
}
constexpr
将允许您使用返回值作为另一个数组的大小,以进行静态(编译时)使用。str[]
是静态定义的(如所示),那么这样做可以正常工作:const size_t numElements = sizeof(str) / sizeof(str[0]);
0
)。或者调用者告诉您有多少个元素(这也很常见)。除了其他答案中列出的方法外,另一种实现方式是在数组末尾添加一个守卫值,比如一个空字符串。然后你可以遍历数组直到找到守卫值。
个人建议使用C++11和
std::vector<std::string> la = { "foo", "bar", "baz" };
因此,在运行时,您可以只查询la.size()
以获取所需内容...。但不幸的是,我没有看到如何在std::array
中使用这个技巧,所以它并不是一个完美的替代方案。
std::array
。而且我认为 OP 不想使用“首先确定数组中元素的数量”来解决“我的数组中有多少个元素”的问题。;-) - Rook使用指针计算数组元素的一种方法:
#include <iostream>
using namespace std;
int main() {
string str[] = { "astring", "bstring", "cstring", "dstring", "zstring" };
cout << ((&str)[1] - str); // 5
cout << endl;
return 0;
}
我通常使用一个单独的变量来跟踪数组大小。
String str[] = { "astring", "bstring", "cstring", "dstring", "zstring" };
int strNum = 5;
然后,如果我需要引用任何字符串,我只需调用它:
String foo = str[strNum-1];
每当我在循环中更新数组时,我只需使用strNum作为索引开始编写新字符串,然后在每个新字符串之后立即在循环中放置一个strNum++。
constexpr
。 - Konrad Rudolphsize(x)
成为一个常量表达式。这意味着int other_array[size(some_array)];
将无效。如果将其设置为constexpr
,则它是一个常量表达式。 - R. Martinho Fernandesconstexpr size_t size( T(&arr)[N]) )
。 - R. Martinho Fernandesconstexpr
了 - C++11现在得到广泛支持。 - anon