我创建了一个元组向量:
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元素:
DataStructure -> push_back(std::make_tuple(std::ignore, some_bool_value, some_pointer_to_some_int_value2);我不知道std::ignore到底是干什么用的。我试着检查cpp参考网站,但我没有得到它。
发布于 2016-11-24 17:14:15
为了详细说明我之前的评论,您不能在这里使用std::ignore,因为它只能用作lvalue,但实际上您也不需要使用它。只需使用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?一般认为最好省略不必要的“裸”指针。
发布于 2016-11-24 17:03:36
我在读http://en.cppreference.com/w/cpp/utility/tuple/ignore。
我认为您不能这样做,因为std::忽略仅用作值占位符。
例如,如果您有一个不想使用的返回值,则可以执行以下操作。
std::ignore = AFunctionWithAReturnValue();它不能用作rvalue的一部分。为了达到您的目的,在第一次扫描时,我只需填写占位符值,如下所示:
std::make_tuple(some_pointer_to_some_int_value, false, nullptr);https://stackoverflow.com/questions/40791483
复制相似问题