gpt4 book ai didi

c++ - 类中 vector 的动态分配

转载 作者:行者123 更新时间:2023-11-30 04:11:41 25 4
gpt4 key购买 nike

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

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();
};

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

编辑:

我在下面提供了更新的代码,以表明我已经为构造函数使用了引用传递。我也希望使用一个移动构造函数,这样我就可以在一个函数中创建这些对象,然后将它们移到外面。

还给出了更新的 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.
}

谢谢,本。

最佳答案

我会说最好保留变量成员 Sequence作为 std::vector (而不是 pointerstd::vector )。正如您提到的“ vector 包装动态数组分配”:std::vector为您管理 RAII 中的内存(堆分配/解除分配/重新分配)时尚:
当你写:std::vector<Nucleotide> Sequence , Sequence存储对象 Nucleotideheap 上(不在 stack 上)

一个建议:在你的构造函数中,你传递了 std::vector按值(以及 std::string )。如果您的 std::vector,按值(value)传递是昂贵的有一个大尺寸。您需要考虑是否可以在您的情况下应用引用传递。

关于c++ - 类中 vector 的动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20156819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com