首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vector<tuple>,make_tuple<int,忽略,float>

Vector<tuple>,make_tuple<int,忽略,float>
EN

Stack Overflow用户
提问于 2016-11-24 16:51:40
回答 2查看 632关注 0票数 0

我创建了一个元组向量:

代码语言:javascript
复制
std::vector<std::tuple<int*, bool, int*>> *DataStucture;

接下来,我想迭代一个数据集,以便只获得每个元组的第一个元素。

这是否合法:

代码语言:javascript
复制
DataStructure -> push_back(std::make_tuple(some_pointer_to_some_int_value, std::ignore, std::ignore));

在下一轮数据集扫描中,我比较了some_int_value的值,并在匹配时设置了以下两个DataStructure元素:

代码语言:javascript
复制
DataStructure -> push_back(std::make_tuple(std::ignore, some_bool_value, some_pointer_to_some_int_value2);

我不知道std::ignore到底是干什么用的。我试着检查cpp参考网站,但我没有得到它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-24 17:14:15

为了详细说明我之前的评论,您不能在这里使用std::ignore,因为它只能用作lvalue,但实际上您也不需要使用它。只需使用nullptr或任何“默认值”来代替:

代码语言:javascript
复制
DataStructure->push_back(std::make_tuple(some_pointer_to_some_int_value, false, nullptr));

如果要将元组解压缩为以下不同的值,则应该使用std::ignore

代码语言:javascript
复制
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?一般认为最好省略不必要的“裸”指针。

票数 1
EN

Stack Overflow用户

发布于 2016-11-24 17:03:36

我在读http://en.cppreference.com/w/cpp/utility/tuple/ignore

我认为您不能这样做,因为std::忽略仅用作值占位符。

例如,如果您有一个不想使用的返回值,则可以执行以下操作。

代码语言:javascript
复制
std::ignore = AFunctionWithAReturnValue();

它不能用作rvalue的一部分。为了达到您的目的,在第一次扫描时,我只需填写占位符值,如下所示:

代码语言:javascript
复制
std::make_tuple(some_pointer_to_some_int_value, false, nullptr);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40791483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档