将空元素添加到声明的容器中,而不声明元素的类型

  • 本文关键字:声明 元素 类型 添加 c++ c++11
  • 更新时间 :
  • 英文 :


当我们在C++中使用复杂的容器时,例如

std::vector<std::map<std::string, std::set<std::string>>> table;

添加空映射(可能表示行或列(的唯一方法是初始化一个新元素并将其推回。例如

table.push_back(std::map<std::string, std::set<std::string>>());

有没有办法避免重新声明类型,而只添加正确的类型元素?

从 CLion 的 IntelliSense 中,我后来发现一个有用的方法是emplace_back()。这将构造一个正确类型的新对象,并将其添加到向量的末尾。

table.emplace_back();

你可以利用复制列表初始化(从 C++11 开始(并编写

table.push_back({});

在 C++11 之前有时我会使用 x.resize(x.size()+1) ,在 C++11 或更高版本中您可以使用 x.push_back({})

尽管其他答案是正确的,但我要补充一点,如果您不能采用这种方法,则可以从声明某些类型别名来缩短该容器类型名称中受益。

我当然只能猜测您的容器的逻辑含义,这是解决的另一件事!

 using PhilosopherNameType = std::string;
 using NeighboursType      = std::set<PhilosopherNameType>;
 using NeighbourMapType    = std::map<PhilosopherNameType, NeighboursType>;
 std::vector<NeighbourMapType> table;
 table.push_back(NeighbourMapType());

我提到这一点是因为你可能仍然可以在其他地方从中受益。

最新更新