矢量<tuple>、make_tuple<int、忽略、浮点>
Vector<tuple>, make_tuple<int, ignore, float>
我创建一个元组向量:
std::vector<std::tuple<int*, bool, int*>> *DataStucture;
接下来,我想遍历一个数据集,只获取每个元组的第一个元素。
这合法吗:
DataStructure -> push_back(std::make_tuple(some_pointer_to_some_int_value, std::ignore, std::ignore));
在下一轮数据集扫描中,我比较some_int_value的值,并在匹配时设置以下数据结构元素:
DataStructure -> push_back(std::make_tuple(std::ignore, some_bool_value, some_pointer_to_some_int_value2);
我不确定std::ignore
到底是为了什么。我尝试检查 cpp 参考网站,但我没有得到它。
我正在阅读 http://en.cppreference.com/w/cpp/utility/tuple/ignore。
我认为你不能这样做,因为 std::ignore 只用作左值占位符。
例如,如果您有不想使用的返回值,则可以执行以下操作。
std::ignore = AFunctionWithAReturnValue();
它不能用作右值的一部分。出于您的目的,我只是在第一次扫描期间填写占位符值,如下所示:
std::make_tuple(some_pointer_to_some_int_value, false, nullptr);
只是为了详细说明我之前的评论,您不能在这里使用std::ignore
,因为它只能用作左值,但实际上您也不需要。只需改用nullptr
或任何"默认"值:
DataStructure->push_back(std::make_tuple(some_pointer_to_some_int_value, false, nullptr));
如果要将元组解压缩为不同的值,则应使用std::ignore
,如下所示:
int* p;
bool b;
for (auto& tuple : *DataStructure) {
std::tie(p,b,std::ignore) = tuple;
// p now have value of first element of tuple
// b now have value of second element of tuple
}
在不相关的说明中,您的第二个操作不会设置现有元组的值,而是添加新元组的值。另外,为什么要使用指向vector
的指针而不是vector
本身或至少std::unique_ptr
?通常认为最好省略不必要的"裸"指针。
相关文章:
- Cpp-Tuple使用带有变量的get
- EASTL矢量<向量<int>>连续的
- 为什么我不能在 constexpr lambda 函数中使用 std::tuple
- 在 std::tuple 上使用 std::variant 的问题
- 在构造函数中使用可变参数初始化 std::tuple
- 将"boost::tuple "转换为"boost::fusion::tuple&quo
- 转发复制的 std::tuple
- 我可以将新的 std::tuple 放入内存映射区域,并在以后读回吗?
- std::tuple 可以根据其值在编译时/运行时排序吗?
- 返回 std::tuple 中的引用和值
- 如何将 boost::hana::tuple 转换为 std::变体
- 如何从可变参数模板参数创建 std::tuple<>?
- std::tuple 的自定义哈希不适用于unordered_set
- 为什么基于 int 的访问不适用于 std::get(std::tuple)?
- 带有引用的std::tuple在clang中编译失败,但在gcc中编译失败
- 尝试实现std::tie和std::tuple的小版本
- std::tuple默认构造函数,带有move可构造元素
- 来自带有 std::tuple 的地图
- Visual Studio 2017 STL 可视化工具失败了一个 std::map<MyIntrusivePtr, std::tuple<....> >
- C++11: 如何编写一个像 Get 一样工作的模板函数<tuple>...但是收到参数包?