首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等尺寸矢量

等尺寸矢量
EN

Stack Overflow用户
提问于 2012-06-21 08:42:40
回答 8查看 119.6K关注 0票数 74

有人知道如何定义恒定大小的向量吗?

例如,与其定义

代码语言:javascript
复制
std::vector<int>

它将是

代码语言:javascript
复制
std::vector<10, int>

它应该是完全交叉的。也许是一个开源类?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2015-06-23 17:06:05

向量总是可以动态增长,但是有两种方法可以分配初始大小:

这将分配初始大小,并用零填充元素:

代码语言:javascript
复制
std::vector<int> v(10);
v.size(); //returns 10

这将分配初始大小,但不使用零填充数组:

代码语言:javascript
复制
std::vector<int> v;
v.reserve(10);
v.size(); //returns 0
票数 76
EN

Stack Overflow用户

发布于 2012-06-21 08:43:41

无法定义常量大小向量。如果在编译时知道大小,可以使用C++11的std::数组聚合。

代码语言:javascript
复制
#include <array>

std::array<int, 10> a;

如果您没有相关的C++11支持,可以使用TR1版本:

代码语言:javascript
复制
#include <tr1/array>

std::tr1::array<int, 10> a;

或者boost::数组,就像其他答案中所建议的那样。

票数 68
EN

Stack Overflow用户

发布于 2016-02-19 19:37:30

如果您想要一个固定的编译时指定大小(ala std::array<T, N>),但是您希望能够在0N之间使用不同数量的元素填充向量,那么最好的选择是eastl::fixed_vector

std::载体:

std::vector的大小是动态的-它将动态地分配所需的存储,您不能限制大小并执行错误。

但是,您可以在需要分配新存储之前,reserve一定大小的元素,然后添加该大小的元素。

vector.size()最初为0,并随着添加元素而增加。

std::数组:

std::array的大小是一个编译时常量,它将静态地分配所需的存储,您不能更改大小。

array.size()总是数组的大小,并且等于array.max_size()

eastl::fixed_vector:

eastl::fixed_vector的大小可以是静态的,也可以是动态的。

它最初将分配一定数量的元素,然后如果允许动态增长,则将根据需要动态分配。

出于最初要求的目的,您可以禁用增长(通过下面的模板实例化中的bEnableOverflow )

fixed_vector.size()最初为0,并随着添加元素的增加而增加。

代码语言:javascript
复制
template<typename T, 
         size_t nodeCount, 
         bool bEnableOverflow = true, 
         typename OverflowAllocator = 
                      typename eastl::type_select<bEnableOverflow,
                                                  EASTLAllocatorType, 
                                                  EASTLDummyAllocatorType>::type>
class fixed_vector;

简单的例子:

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <array>
#include "EASTL/fixed_vector.h"

int main()
{
    std::vector<int> v;
    v.reserve(10);
    std::cout << "size=" << v.size() << " capacity=" << v.capacity() << '\n';

    std::array<int, 10> a;
    std::cout << "size=" << a.size() << " capacity=" << a.max_size() << '\n';

    eastl::fixed_vector<int, 10, false> fv;
    std::cout << "size=" << fv.size() << " capacity=" << fv.capacity() << '\n';

    return 0;
}

输出:

代码语言:javascript
复制
size=0 capacity=10
size=10 capacity=10
size=0 capacity=10

注意,array的大小为10,而vectorfixed_vector为0。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11134497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档