将空元素添加到声明的容器中,而不声明元素的类型
Adding empty element to declared container without declaring type of element
当我们在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());
我提到这一点是因为你可能仍然可以在其他地方从中受益。
相关文章:
- 将在堆栈上声明的元素添加到静态数组
- 正确unique_ptr 1 个元素分配数组的声明
- 如果我在相应 char 数组的声明中为其提供额外的元素,是否会自动设置 NULL?
- 删除在结构 c++ 中声明的数组元素
- 使用声明中的元素类型隐式初始化 std::array
- 如何在类中声明静态 const 结构元素
- 在C++中,如何在没有新元素且不单独声明单个元素的情况下创建"std::initializer_list<base *>"?
- 将空元素添加到声明的容器中,而不声明元素的类型
- 声明一个字符串数组并查找其中的元素数量(openFrameworks)
- (C++)初始化和声明二维向量中的元素
- 缺少未声明数组元素的 nullptr
- 无法将 glm::mat4 元素push_back到头文件中声明的向量中
- 如何声明具有 1000000 个元素的类 C++
- 如何声明具有 1000000 个元素的类 C++
- 如何声明具有可变数量的元素的数组 [C++]
- 可以单独声明函数数组的元素
- CodeSynthesis XSD CXX 不解析 XML 文件,表示未声明属性/元素
- 当您声明一个具有初始大小的数组时,其元素最初是否为空字符串
- C++2D矢量声明和来自调试器的元素访问
- 在C++中声明静态/动态数组会自动调用每个元素的默认构造函数