gpt4 book ai didi

c++ - 插入以设置为 "Fixed"大小循环

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:37 24 4
gpt4 key购买 nike

所以我想将我的 set 中所有元素的两倍插入回 set 中。但显然我需要获取结束迭代器,这样我就不会一直迭代新元素。 (别担心,我检查过,set::insert 不会使迭代器无效:http://www.cplusplus.com/reference/set/set/insert/#validity)所以给定输入 set<int> foo = { 1, 2, 3 },这就是我所做的:

for(auto it = begin(foo), finish = end(foo); it != finish; ++it) {
foo.insert(*it * 2);
}

我希望我的集合包含:

1, 2, 3, 4, 6

惊喜!它包含:

-2147483648, -1073741824, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576, 32768, 49152, 65536, 98304, 131072, 196608, 262144, 393216, 524288, 786432, 1048576, 1572864, 2097152, 3145728, 4194304, 6291456, 8388608, 12582912, 16777216, 25165824, 33554432, 50331648, 67108864, 100663296, 134217728, 201326592, 268435456, 402653184, 536870912, 805306368, 1073741824, 1610612736

Live Example

显然 end(foo) 并没有像我想象的那样工作。那么...如果我想保存循环大小并计数呢?

最佳答案

迭代器仍然有效,但作为 std::set是一个基于节点的容器,元素总是排序的,使用std::less<Key>默认情况下

看看迭代器如何跳转到较低的值,使其为 finish 而奋斗

Code snippe :

    for(  ; it != finish; ++it)
{
auto t = *it ;
std::cout << "At " << t << "\n";
foo.insert( t * 2 ) ;
std::cout << "Inserted " << t*2 << "\n";
}

At 1
Inserted 2
At 2
Inserted 4 <----+
At 3 |
Inserted 6 | <---+
At 4 // jumped back -----+ |
Inserted 8 |
At 6 // Jumped back -----------+
Inserted 12
At 8
.....

关于c++ - 插入以设置为 "Fixed"大小循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41853677/

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