如何修改函数以按C++的排序顺序插入每个项目

How do I modify functions to insert each item in sorted order in C++

本文关键字:顺序 排序 插入 项目 C++ 何修改 修改 函数      更新时间:2023-10-16

我正在学习向量,但一直困扰着这个问题。这是一个练习题,我没有得到回答的荣誉。这是一个在线课程,没有提供太多帮助,只对最终项目进行评分。非常感谢解释!

修改 numsInsert 函数以按排序顺序插入每个项目。新程序应输出:4 19 55 250

#include <iostream>
#include <vector>
using namespace std;
void numsInsert(vector<int>& numsList, int newNum) {
   unsigned int i = 0;
   for (i = 0; i < numsList.size(); ++i) {
      if (newNum < numsList.at(i)) {
         // FIXME: insert newNum at element i
         break; // Exits the for loop
      }
   }
   // FIXME: change so executes if higher number NOT found
   // Change "true" to "i == ??" (determine what ?? should be)
   if (true) { // No higher number was found, so append to end
      numsList.push_back(newNum);
   }   
   return;
}
void numsPrint(const vector<int>& numsList) {
   unsigned int i = 0;
   for (i = 0; i < numsList.size(); ++i) {
      cout << " " << numsList.at(i) << endl;
   }  
   return;
}
int main() {
   vector<int> numsList;
   numsInsert(numsList, 55);
   numsInsert(numsList, 4);
   numsInsert(numsList, 250);
   numsInsert(numsList, 19);
   numsPrint (numsList);
   return 0;
}

对于第一个FIXME,放置以下代码:

numList.insert(numList.begin() + i, newNum);

insert在参数newNum numList的第 i 个位置。 numList.begin()将迭代器返回到numList的开头,+ i将其向前调整i位置(insert()的第一个参数是迭代器(。

对于第二个FIXME,将if条件替换为:

if (i == numList.size()) { //...

如果没有找到更大的数字,i==向量numList的大小(因为这是前一个循环的隐式停止条件(。

作为参考,您可以在此链接中看到矢量 API。这就是我为了创建这个答案而提到的。