我尝试了这个数组声明并检查大小:
string path1[1] = {"D:\\Users\\user-pc\\Desktop\\testing\\inputs\\xml_source_example.xml"};
cout << path1->length();
并检查尺寸:
62
我希望输出为1,所以我尝试使用 - &gt; size(),我仍然得到62。 我知道数组中的第一项长度为62,但我想要数组中的项目数。
如何获取阵列中有多少项?
答案 0 :(得分:3)
尝试此操作,利用std::begin
和std::end
:
std::end(path1) - std::begin(path1);
或者,您可以设置自己的数组大小函数:
#include <cstddef> // for std::size_t
template <typename T, std::size_t N>
constexpr std::size_t size(const T(&)[N])
{
return N;
}
用法:
#include <iostream>
int main()
{
int a[42];
std::cout << size(a) << std::endl;
}
答案 1 :(得分:1)
对于C / C ++中的任何静态分配 array
,请使用sizeof(array)/sizeof(*array)
以获取条目数。
注意#1:
计算将在编译期间进行(而不是在运行时)。
注意#2:
int array[10]; // Static allocation
int array[] = new int[10]; // Dynamic allocation
注意#3:
您可以在声明范围内应用此方法 。
例如,如果在函数内声明array
,则只能在该函数的范围内应用此方法。您不能在接收array
作为参数的任何其他函数中应用此方法,因为它被视为该函数中的指针。
如果数组在源文件中全局声明,则可以在该文件中的所有函数中应用此方法。
答案 2 :(得分:1)
在c ++中,不管理数组,并且始终是声明时设置的长度。有许多类型的容器在STL中进行管理。我会毫不犹豫地尝试向量,如果我不得不做出推荐但是看看其他任何一个是否更符合您的需求。
答案 3 :(得分:0)
有几种解决方案。已经有2个由juanchopanza和barak manos给出。这是第三个
#include <type_traits>
int a[12];
std::cout<<std::extent<decltype(a)>::value<<std::endl;
但是考虑使用std :: array而不是old-C syle数组。
答案 4 :(得分:0)
尝试使用
string path1[1] = "D:\\Users\\user-pc\\Desktop\\testing\\inputs\\
xml_source_example.xml";
cout << sizeof(path1)/sizeof(path1[0]);
这将按照您的要求工作,但是当指针到来时它将失败。但根据您的要求,这就足够了。