gpt4 book ai didi

c++ - 关于增量和赋值的解释

转载 作者:行者123 更新时间:2023-11-30 04:17:21 27 4
gpt4 key购买 nike

我对 C++ 中的增量如何工作有一些疑问;

我见过很多关于 i++ 或++i 的值的主题,但在用于赋值时却没有。

我有一个 boost::container::flat_map<std::string, std::string*> param_;boost::sregex_token_iterator ii谁包含[姓名,测试]。

如果我使用 char*,我会做类似的事情

param[*ii] = new std::string(*(ii + 1));

但它不起作用,所以我做了类似的事情:

 std::string tmp = *(ii++);
this->param_[tmp] = new std::string(*(ii));

我得到了正确的输出:

 name : test;

但是当我尝试在一行中执行此操作时,我没有得到正确的输出:首先我试过:

this->param_[*(ii++)] = new std::string(*(ii));

但我得到: id : id;

然后我错误地尝试了: this->param_[*(++ii)] = new std::string(*(ii));

我得到: test : name我明白为什么我首先得到“测试”而不是为什么我在第二个得到“名字”因为我已经递增了 ii?

为了显示 map ,我只做了一个

 for (auto ii = this->param_.begin(); ii != this->param_.end();++ii)
std::cout << ii->first << ":" << *ii->second << std::endl;

最佳答案

(ii + 1) 不起作用,因为 operator+ 仅受 RandomAccessIterators 支持,而 sregex_token_iterator 只是一个 ForwardIterator。

ii++ 版本有未定义的行为,因为您在单个表达式中从同一个变量读取和写入。

如果你真的想在一条语句中做到这一点,你可以这样做:

param[*ii] = new std::string(*++boost::sregex_token_iterator(ii));

这会创建迭代器的拷贝并递增拷贝,而不是原始拷贝,但不清楚它在做什么,最好将其拆分为多个语句:

boost::sregex_token_iterator next = ii;
++next;
param[*ii] = new std::string(*next);

关于c++ - 关于增量和赋值的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17134424/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com