C++ 如何找到数组的整数大小
如果答案非常明显,我很抱歉。 我写了一小段代码,用于初始化数组中的向量C++ 如何找到数组的整数大小,c++,arrays,vector,integer,C++,Arrays,Vector,Integer,如果答案非常明显,我很抱歉。 我写了一小段代码,用于初始化数组中的向量 int arr[] = {1,2,3,4,5}; vector<int> vec = {begin(arr), end(arr)}; for (int i = 0; i < 5; ++i) cout << vec[i]; intarr[]={1,2,3,4,5}; 向量vec={begin(arr),end(arr)}; 对于(int i=0;i
int arr[] = {1,2,3,4,5};
vector<int> vec = {begin(arr), end(arr)};
for (int i = 0; i < 5; ++i)
cout << vec[i];
intarr[]={1,2,3,4,5};
向量vec={begin(arr),end(arr)};
对于(int i=0;i<5;++i)
cout要获取int arr[]
的大小,可以使用sizeof(arr)/sizeof(*arr)
要使用数组中的值初始化向量
,可以使用:
int arr[] = {1,2,3,4,5};
vector<int> vec (arr, arr + sizeof(arr) / sizeof(*arr) );
p.s.在C++11中,您甚至可以使用:
for(自动元素:vec)
std::cout要获取int-arr[]
的大小,可以使用sizeof(arr)/sizeof(*arr)
要使用数组中的值初始化向量
,可以使用:
int arr[] = {1,2,3,4,5};
vector<int> vec (arr, arr + sizeof(arr) / sizeof(*arr) );
p.s.在C++11中,您甚至可以使用:
for(自动元素:vec)
std::cout在不硬编码其大小的情况下迭代向量:
for (int i = 0; i < vec.size(); ++i)
cout << vec[i];
for ( vector<int>::iterator it = vec.begin(); it != vec.end(); ++it )
cout << *it;
for(int i=0;i cout在不硬编码其大小的情况下迭代向量:
for (int i = 0; i < vec.size(); ++i)
cout << vec[i];
for ( vector<int>::iterator it = vec.begin(); it != vec.end(); ++it )
cout << *it;
for(int i=0;i
要获取阵列的大小,请执行以下操作:
template <typename T, std::size_t N>
constexpr std::size_t array_size(const T(&)[N]) { return N; }
模板
constexpr std::size\u t数组大小(const t(&)[N]){return N;}
std::vector
已经有一个成员方法size()
- 要获取阵列的大小,请执行以下操作:
template <typename T, std::size_t N>
constexpr std::size_t array_size(const T(&)[N]) { return N; }
模板
constexpr std::size\u t数组大小(const t(&)[N]){return N;}
std::vector
已经有一个成员方法size()
代码的第一部分
int arr[] = {1,2,3,4,5};
vector<int> vec = {begin(arr), end(arr)};
在三个方面都是不好的:
- 错误循环,应使用基于范围的
for
- 硬编码尺寸,应使用
vec.size()
或等效物
- 环体不使用支架容易导致维护问题
更正为普通C++03for
循环:
for (int i = 0; i < (int)vec.size(); ++i)
{
cout << vec[i];
}
但是,您只需将基于C++11范围的用于,如下所示:
for( auto const value : vec )
{
cout << value;
}
我不确定专门针对原始数组是否值得,但如果您需要constexpr
,则需要这样做,例如
template< class Item, Size n >
auto constexpr count_of( Item (&a)[n] )
-> Size
{ return n; }
模板
(项目(&a)[n]的自动constexpr计数
->大小
{返回n;}
免责声明:编译器未涉及任何代码。您的代码的第一部分
int arr[] = {1,2,3,4,5};
vector<int> vec = {begin(arr), end(arr)};
在三个方面都是不好的:
- 错误循环,应使用基于范围的
for
- 硬编码尺寸,应使用
vec.size()
或等效物
- 环体不使用支架容易导致维护问题
更正为普通C++03for
循环:
for (int i = 0; i < (int)vec.size(); ++i)
{
cout << vec[i];
}
但是,您只需将基于C++11范围的用于,如下所示:
for( auto const value : vec )
{
cout << value;
}
我不确定专门针对原始数组是否值得,但如果您需要constexpr
,则需要这样做,例如
template< class Item, Size n >
auto constexpr count_of( Item (&a)[n] )
-> Size
{ return n; }
模板
(项目(&a)[n]的自动constexpr计数
->大小
{返回n;}
免责声明:编译器未涉及任何代码。为了完整性:此问题是为解决此问题而创建的。(C++11)
//这是静态分配的,与向量不同
//它使用动态分配的内存。
数组arr={1,2,3,4,5};
//不同的迭代方法:
用于(自动和电气:arr){
cout完整性:这个问题就是为它创建的。(C++11)
//这是静态分配的,与向量不同
//它使用动态分配的内存。
数组arr={1,2,3,4,5};
//不同的迭代方法:
用于(自动和电气:arr){
coutvector
有这样一个函数。std::array
也有这样一个函数,您应该使用它来代替内置数组。vector
还允许您使用初始值设定项列表,因此数组无论如何都是无意义的。您通常会使用ranged for循环或算法,因此知道大小也没有意义。@chris:std::array
要求您指定大小(或者您应该实现一个make_array
)。@Jarod42,内置数组也是如此。@chris:不,正如OP的示例int arr[]={1,2,3,4,5}
,您没有(明确地)指定大小为5
@Jarod42,您从未明确说过。您仍然通过初始值设定项列表提供大小,就像使用make_array
时一样vector
具有此功能。std::array
,您应该使用它来代替内置数组。vector
也允许您使用它使用初始值设定项列表,因此数组无论如何都是无意义的。通常情况下,您会使用范围for循环或算法,因此知道大小也是无意义的。@chris:std::array
要求您指定大小(或者您应该实现make\u array
).@Jarod42,内置数组也是。@chris:不,就像OP的例子int-arr[]={1,2,3,4,5}
,你没有(显式地)指定大小为5
@Jarod42,您从未明确说过。您仍然通过初始值设定项列表提供大小,就像使用make_array
-1表示单个小NIT的总和一样。表达式sizeof(arr)/sizeof(arr[0])
非常详细(1)和(2)键入不安全,因为它接受一个指针作为arr
,然后产生错误的结果。与OP的代码相比,向量的初始化是不必要的冗长和复杂。for
循环可能会产生一个有符号/无符号警告,这是不正确的。-1表示单个小NIT的总和。表达式sizeof(arr)/sizeof(arr[0])
是(1)非常冗长的,(2)类型不安全的,因为它接受一个指针作为arr
,然后产生错误的结果。与OP的代码相比,向量的初始化是不必要的冗长和复杂。for
循环可能产生一个有符号/无符号的警告,这是不正确的。
// This is statically allocated, unlike vector
// which uses dynamic allocated memory.
std::array<int, 5> arr = {1, 2, 3, 4, 5};
// Different iterations methods:
for ( auto & elem : arr ) {
cout << elem << endl;
}
for ( int i = 0; i < arr.size(); i++) {
cout << arr[i] << endl;
}
for ( auto it = arr.begin(); it != arr.end(); ++it) {
cout << *it << endl;
}