gpt4 book ai didi

c++ - 在 C++ 中与循环中的变化值进行比较是一种很好的形式吗?

转载 作者:行者123 更新时间:2023-11-30 00:42:29 24 4
gpt4 key购买 nike

毫无疑问,你们中的一些人已经看过我最近的帖子,都是关于同一个程序的。我一直遇到问题。重申一下:仍在学习,不是很高级,不太了解指针,没有上课,根本不了解OOP概念等。这段代码只是将两个已排序的 vector farray和sarray合并为一个已排序的 vector vector 。至少,我希望这就是它的作用。告诉我:

    //int num is to find the size of the original vector and
//build up farray and sarray; not used in the merge process
int num = original.size()
std::vector<int> final;

std::vector<int>::iterator it = farray.begin();
std::vector<int>::iterator iter = sarray.begin();

//farray.size() == (0 thru (num / 2))
//sarray.size() == ((num / 2) thru num)
for (;it != farray.end() && iter != sarray.end();) {
if (*it > *iter) {
final.push_back(*it);
it++;
}
else
{
final.push_back(*iter);
iter++;
}

if (it == farray.end()) {
for (int i = 0; iter < sarray.end(); i++) {
final.push_back(*iter);
}
}

if (iter == sarray.end()) {
for (int i = 0; it < farray.end(); i++) {
final.push_back(*iter);
}
}
}

我重写了我的合并排序函数的合并部分,以便...好吧,让它工作。我实际上对这段代码有几个问题:

  1. 与 std::vector::iterators 进行比较是一种很好的形式吗?如果 for 循环可能会在下一次传递时更改它们,它会为我的最后两个 if 语句 && iter?
  2. iter 和 it 的值会在这个循环的最后一次通过时改变并搞砸我的代码吗?将我最后的 if 语句放在 *it 和 *iter 比较之前吗?
  3. end() 成员函数是否引用调用它的任何对象的最后一个值?看起来它可能会以某种方式延伸过去。

编辑:我会在明天回复所有回复,所以如果您想了解更多信息,请到时再回来查看。已经过了午夜。晚安。

最佳答案

1 。比较与 for 循环条件来自同一容器的迭代器是很好的,但是只有当您在 for 循环语句的增量部分或 for 循环本身的主体中移动一个或其他迭代器时,这才有意义。在此 for 循环中,您比较 iter反对sarray.end()但是 for 循环永远不会改变 iter .这意味着要么没有迭代,要么 for 循环永远不会终止。另外,您可能想使用 !=而不是 <为了比较。 ==!=适用于所有迭代器,<没有。

            for (int i = 0; iter != sarray.end(); i++) {
final.push_back(*iter);
}

作为iter从您希望循环开始的地方开始,您可能需要这样的东西:

            for (; iter != sarray.end(); ++iter) {
final.push_back(*iter);
}

由于您仍在学习(虽然我们不是所有人!),通过这样的算法工作可能具有指导意义,但您应该注意 std::merge这可能会做你想要的。

std::merge( farray.begin(), farray.end(), sarray.begin(), sarray.end(), std::back_inserter( final ) );

(您需要 #include <iterator><algorithm> 。)

2。我没有看到递增的 iter 或它在外部 for 循环中使后面的 for 循环中的逻辑无效,1. 中的点放在一边。

3。 end()指向容器末尾后的一个,因此您可以将其用于循环终止检查,但您不应该尝试将“==”的迭代器解引用为“.end()”。

关于c++ - 在 C++ 中与循环中的变化值进行比较是一种很好的形式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/767099/

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