C++中的a std::vector和a有什么区别std::array?什么时候应该优先于另一个?各自的优点和缺点是什么?我的所有教科书都列出了它们是如何相同的.
template<typename T, size_t n>
size_t array_size(const T (&)[n])
{
return n;
}
Run Code Online (Sandbox Code Playgroud)
我没有得到的部分是这个模板函数的参数.当我通过数组时,数组会发生什么,它给出n了数组中元素的数量?
有人可以解释这段代码的工作原理吗 我知道这段代码的目的是获取数组的长度,但我不知道这段代码是如何工作的:
template<typename T, int size>
int GetArrLength(T(&)[size]){return size;}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有
int list[] = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)
如何获得大小list?
我知道对于char数组,我们可以strlen(array)用来查找大小,或者'\0'在数组末尾检查.
我尝试sizeof(array) / sizeof(array[0])了一些答案,但它只适用于主?例如:
int size(int arr1[]){
return sizeof(arr1) / sizeof(arr1[0]);
}
int main() {
int list[] = {1, 2, 3};
int size1 = sizeof(list) / sizeof(list[0]); // ok
int size2 = size(list_1); // no
// size1 and size2 are not the same
}
Run Code Online (Sandbox Code Playgroud)
为什么?
我遇到了这个片段
template <typename T, size_t N>
char (&ArraySizeHelper(T (&array)[N]))[N];
#define arraysize(array) (sizeof(ArraySizeHelper(array)))
Run Code Online (Sandbox Code Playgroud)
在这篇文章http://software.intel.com/en-us/articles/pvs-studio-vs-chromium/
我见过其他模板做同样的事情,比如这个
我理解这些,但我一直遇到这个困难.
任何帮助,将不胜感激.
由于我想在函数中动态找到数组大小,我使用了sizeof运算符.但我有一些意想不到的结果.这是一个演示程序,向您展示,我想做什么.
//------------------------------------------------------------------------------------------
#include <iostream>
void getSize(int *S1){
int S_size = sizeof S1/sizeof(int);
std::cout<<"array size(in function):"<<S_size<<std::endl;
}
int main(){
int S[]={1,2,3,2,5,6,25,1,6,21,121,36,1,31,1,31,1,661,6};
getSize(S);
std::cout<<"array size:"<<sizeof S/sizeof(int)<<std::endl;
return 0;
}
//------------------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
编译命令:g ++ demo1.cc -o demo1 {fedora 12}
输出:
array size(in function):2
array size:19
Run Code Online (Sandbox Code Playgroud)
请解释一下,为什么会这样.可以做些什么来解决这个问题.