C++中的动态非矩形二维向量
Dynamical, non-rectangular two dimensional vectors in C++
我在C++中看到了很多关于矩形二维数组的讨论,但对我正在使用的内容却不多。 我需要在固定数量的事物上保留相同的信息,所以我创建了一个结构,我想我想要一个向量的向量,所以我做了以下定义:
typedef struct sInfo {
int Length;
int RemainingReadLength;
int RemainingWriteLength;
bool FillFlag;
int Offset;
};
class InfoClass {
protected:
<vector<vector<sInfo> > vvInfo;
uint32 Index1;
uint32 Index2;
sInfo Info;
public:
InfoClass () : vvInfo(NUM_INFO) {}
void AddInfo() {
vvInfo[Index1].push_back(Info);
}
uint getLength () {
return (vvInfo[Index1][Index2].Length;
}
}
我在这里打算的是固定数量的行,每个行都可以独立扩展或收缩。 据我所知,ctor 正在创建NUM_ID空向量,至少一开始,getLength 是有效的。 但是,AddInfo似乎存在分配问题。
那么,首先,这是解决问题的最佳方式吗? 如果是这样,我是否正确处理了这些动态分配的参差不齐的向量?
谢谢
你的方法对我来说还不错。但是,如果您有固定数量的行并且可以访问 C++0x/TR1,则可以使用 std::(tr1::)array<T,N>
.
那么,您所说的分配问题是什么?
好吧,当你推入外部向量时,它可能会重新分配,这会导致所有内部向量被复制,这意味着它们分配新内存,复制内容并释放旧内存。
然而:
- C++0x 不再有这个问题,因为它在重新分配时使用移动构造函数,并且(前提是标准库作者正确实现了这些移动构造函数)它们继续使用新对象的旧内存。 分配
- 策略的设计使得每个成员平均只复制几次(1-2 表示重新分配因子 2,3-4 表示重新分配因子 1.5;取决于特定的实现)。
- 使用写入时复制的实现不会有这个问题,但IIRC没有标准库将其用于向量(而有些用于字符串)
- 如果您事先知道外部向量的大小并对其进行
.reserve()
,则不会发生重新分配,因此无需担心。
相关文章:
- 我在二维向量中是否正确分配了内存
- 在二维向量或数组中可以存储的最大元素数是多少?
- 如何将整数字符串转换为整数的二维向量?
- 如何使用擦除和迭代器来删除二维向量中的项目
- 如何在二维向量c++中迭代col
- 如何在C++中将.csv文件的元素存储到二维向量中?
- std::vector::clear()ing 二维向量线程的内部向量安全吗?
- 在我为我的二维向量提供第一个值后控制台关闭
- 以C++输出二维向量
- 在 c++ 中赋值给二维向量
- 在二维向量的每一列中查找最大值
- 类对象初始化的二维向量
- 有没有办法像python:np.concatenate([x,y,z],axis=1)中那样沿着列连接三个二维向量C++
- 我如何在二维向量中存储一些数组
- 我可以push_back矩形形状到继承矩形形状的类的二维向量中吗?
- 二维向量的迭代器
- 在 STL 中,如何交换二维向量
- 创建一个二维向量阵列,遍历
- 创建二维向量的错误
- C++从文件中读取信息并从该信息构建二维向量