我需要使用vector<unique<TNode>>
初始化nullptr
。 this帖子中的方法过于复杂。我的情况很特殊,因为我只需要将其初始化为nullptr
。我怎样才能实现它?
我知道我每次都可以使用for循环到push_back
和nullptr
。有优雅的方式吗?
BTW,make_unqiue
对我的编译器不起作用。
#include <iostream>
#include <memory>
#include <vector>
using namespace std;
struct TNode {
//char ch;
bool isWord;
vector<unique_ptr<TNode> > children;
TNode(): isWord(false), children(26,nullptr) {}
};
int main()
{
TNode rt;
return 0;
}
答案 0 :(得分:9)
std::vector<std::unique_ptr<int>> v (10);
它将创建一个包含10个unique_ptr
个对象的向量,所有对象都默认初始化(不进行任何复制)。 unique_ptr
的默认初始化指向任何内容。
请注意,这与此完全不同:
std::vector<std::unique_ptr<int>> v (10, nullptr);
尝试使用初始化为unique_ptr
的10个nullptr
副本初始化向量,由于unique_ptr
无法复制,因此无法完成此操作。
答案 1 :(得分:1)
您可以简单地写一下:
struct TNode {
Tnode(unsigned required_children) :
children(required_children) {}
...
vector<unique_ptr<TNode> > children;
从std::unique_ptr
constructor页面上您会看到:
构造一个没有任何东西的std :: unique_ptr。
到您在结构的构造函数中传入的数字。所以你可以这样做:
TNode rt(number_I_want);
您的向量中将有number_I_want
个唯一指针。他们不一定会持nullptr
,但是他们知道他们什么都不应该关注。
答案 2 :(得分:0)
另一种解决方案是使用std::array
,以便您更轻松地指定尺寸。
#include <array>
class TNode {
private:
struct TNode {
bool end_of_word = false;
std::array<std::unique_ptr<TNode>, 26> links;
};
TNode root;
// The rest of your Trie implementation
...