• 回答数

    3

  • 浏览数

    149

不老的传说kz
首页 > 英语培训 > 定长数组英语

3个回答 默认排序
  • 默认排序
  • 按时间排序

蓉儿…点滴缘

已采纳

你需要使用数组的时候,std::vector是你的第一选择,它在大多数情况下效率都是最高的,如果你需要指定长度的数组,可以使用reserve()预先分配空间,或使用参数为长度的构造函数(参考中的第3个)。例如:constexpr std::size_t init_size = 100;std::vector vi1(init_size);std::vector vi2;vi2.reserve(in

定长数组英语

173 评论(10)

月光下的芙蓉

首先我们必须清楚以下两点:在VB .NET之后,VB程序调用API并非直接调用,而是通过.NET平台中调用非托管代码的接口进行调用。这个接口可以对你的参数做手脚。在VB .NET之后,结构中声明的元素不能被初始化。于是,我们在结构中声明数组时不能声明它的大小。这是一件非常糟糕的事情。比如说我们在C语言中有这么一个结构:struct ArrayStruct{ int Array1[5];};而VB里你却只能声明Public Structure ArrayStruct Dim Array1 as Integer()End Structure那么,我们只好日后用Redim把这个数组长度改成5了。可是我们知道,这个动态数组在内存中实际是以指针的形式存在。这段代码相当于C语言里的struct ArrayStruct{ int *Array1;};有人说这又能怎么样。我们假设一个API要求传入20字节的一个结构,如果你在VB里这样写结构的话,实际传入的结构大小只有4字节,程序很可能就会出大错。但如果我们这样写:Public Structure ArrayStruct Dim Array1 as Integer()End Structure那么编译器就会认为这是一个长度为5的定长数组。在VB里这个数组用起来和普通数组一样。但调用API时,调用非托管代码的接口会真的分配一片固定的内存,把数组里的内容复制进去,调用完后再把结果复制回来。这样就可以像C语言一样顺利使用API了。PS:日后往结构里填数据时仍然要Redim Array1(4)。VB .NET之后,真正意义上的定长数组已经不存在。为确保调用API时,参数数组在内存中占有位置大小确定的空间,需加前缀

258 评论(8)

蛋蛋徐要发疯

1. vector(=>动态数组的替代品)与string类似 vector的new与delete自动完成 eg:    #include     using namespace std;     int main() {     vectorvi;     /*创建了一个int类型,储存有0个元素的数组,但它可以自动new和delete/*     int n;     cin>>n;     vectorvd(n) ;     /*创建了一个double类型,储存有n个元素的数组,但它可以自动new和delete/*     vectorvt(n_elem) ;     /*创建了一个typeName类型,储存有n_elem个元素的数组,但它可以自动new和delete/*     return 0; }2. vector与数组的比较: vector安全,效率低; 数组不安全,效率高. 3. array(定长数组的替代品)与数组类似 array的长度固定    #include     using namespace std;     int main() {     arrayai;     arrayad={1.21.3,1.4,1.5};     arrayarr;     /*创建了一个typeName类型,储存了n_elem个元素的数组*/     /*注意:array的n_elem不能是变量,但vector的n_elem可以是变量*/     return 0;     }4. array 与vector的比较: (1)array效率高 (2)写在3

285 评论(9)

相关问答