在类中动态分配向量

病房9250

如果我有一个包含另一个类的向量的类,并且我希望它很长:

class NucleotideSequence{
private:
    std::string Name;
    std::vector<Nucleotide> Sequence;
public:
    NucleotideSequence();
    NucleotideSequence(std::string name, std::vector<Nucleotide> seq);
    std::string getName();
    Nucleotide* getBase(int pos1);
    int getLength();
    void print();
};

在这种情况下,向量序列,是否需要通过使Sequence * Sequence并在构造函数中创建一个新向量来动态分配它?我想确保对大型矢量(超过数十万个元素)使用正确的资源(堆栈还是堆)。正确的做法是?我听说向量包装了动态数组分配。

编辑:

我在下面提供了更新的代码,以显示我已使用构造函数的引用传递。我希望也可以使用move构造函数,以便可以在函数中创建这些对象,然后将其移到外部。

还提供了更新的getPos方法,如果该位置在序列中不存在,则该方法将引发错误。

class NucleotideSequence{
private:
    std::string Name;
    std::vector<Nucleotide> Sequence;
public:
    NucleotideSequence();
    NucleotideSequence(const std::string &name, const std::vector<Nucleotide> &seq); // Note that a pointer is not needed since the std::vector class allocated memory on the heap for us and is a wrapper for that whole RAII process.
    std::string getName();
    Nucleotide getBase(int pos);
    int getLength();
    void print();
};

NucleotideSequence::NucleotideSequence(const std::string &name, const std::vector<Nucleotide> &seq)
{
    Name = name;
    Sequence = seq;
}

// Get a specific base
Nucleotide NucleotideSequence::getBase(int pos)
{
    for(std::vector<Nucleotide>::iterator i = Sequence.begin(); i != Sequence.end(); i++)
    {
        if(pos == i->getPos())
        {
            return *i; // Return the correct nucleotide object.
        }
    }
    throw BoundsError(); // If the desired position is not found, throw the error.
}

谢谢,本

洛兰多

我要说的是,最好将变量成员保留Sequencestd::vector(而不是pointerto std::vector)。正如您提到的“向量包装动态数组分配”:通过std::vector以下方式为您管理内存(堆分配/释放/重新分配)RAII
写时std::vector<Nucleotide> SequenceSequence将对象存储Nucleotideheap(而不是stack)上

一个建议:在构造函数中,您要传递std::vector按值(以及std::string)。如果您的std::vector公司规模很大,那么按价值传递价格昂贵您需要考虑是否可以在您的情况下应用引用传递。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C ++中动态分配向量的安全方法是什么

来自分类Dev

在cuda中具有动态分配的C ++类?

来自分类Dev

动态分配结构向量的内存

来自分类Dev

动态分配随机特征向量

来自分类Dev

MASM向量,如数组动态分配

来自分类Dev

动态分配结构向量的内存

来自分类Dev

动态分配结构向量内存

来自分类Dev

如何释放动态分配的向量?

来自分类Dev

结构中的动态分配

来自分类Dev

从CSS内部动态分配CSS类

来自分类Dev

显示/隐藏动态分配的类

来自分类Dev

打字稿:动态分配类的属性

来自分类Dev

处理包含动态分配的成员的对象的向量

来自分类Dev

另一个向量与动态分配的数组

来自分类Dev

代码超出范围。这个向量如何动态分配?

来自分类Dev

如何初始化不同动态分配地址的向量

来自分类Dev

在Python中,动态分配字典条目

来自分类Dev

在pascal中动态分配匿名函数

来自分类Dev

C ++中的动态分配数组

来自分类Dev

在动态分配的矩阵中读取错误

来自分类Dev

释放C中动态分配的内存

来自分类Dev

C ++中的动态分配错误

来自分类Dev

在C中动态分配线程

来自分类Dev

C ++中的动态分配数组

来自分类Dev

在QT中释放动态分配的内存

来自分类Dev

在结构中动态分配**指针

来自分类Dev

在Node JS中动态分配端口

来自分类Dev

在C中动态分配内存

来自分类Dev

C中未知矩阵的动态分配