有人知道如何定义恒定大小的向量吗?
例如,与其定义
std::vector<int>它将是
std::vector<10, int>它应该是完全交叉的。也许是一个开源类?
发布于 2015-06-23 17:06:05
向量总是可以动态增长,但是有两种方法可以分配初始大小:
这将分配初始大小,并用零填充元素:
std::vector<int> v(10);
v.size(); //returns 10这将分配初始大小,但不使用零填充数组:
std::vector<int> v;
v.reserve(10);
v.size(); //returns 0发布于 2012-06-21 08:43:41
无法定义常量大小向量。如果在编译时知道大小,可以使用C++11的std::数组聚合。
#include <array>
std::array<int, 10> a;如果您没有相关的C++11支持,可以使用TR1版本:
#include <tr1/array>
std::tr1::array<int, 10> a;或者boost::数组,就像其他答案中所建议的那样。
发布于 2016-02-19 19:37:30
如果您想要一个固定的编译时指定大小(ala std::array<T, N>),但是您希望能够在0和N之间使用不同数量的元素填充向量,那么最好的选择是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,并随着添加元素的增加而增加。
template<typename T,
size_t nodeCount,
bool bEnableOverflow = true,
typename OverflowAllocator =
typename eastl::type_select<bEnableOverflow,
EASTLAllocatorType,
EASTLDummyAllocatorType>::type>
class fixed_vector;简单的例子:
#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;
}输出:
size=0 capacity=10
size=10 capacity=10
size=0 capacity=10注意,array的大小为10,而vector和fixed_vector为0。
https://stackoverflow.com/questions/11134497
复制相似问题