如何为此代码编写模板

How do you write a template for this code?

本文关键字:代码      更新时间:2023-10-16

所以这是我C++,现在我得到的唯一错误是:

liux1780_9B.cpp:10:1:错误:在没有参数列表的情况下无效使用模板名称"std::vector" 矢量气泡排序(矢量); ^

liux1780_9B.cpp:在函数 'int main()' 中:

liux1780_9B.cpp:68:8:错误:"气泡排序"之前缺少模板参数 矢量气泡排序(矢量项); ^

liux1780_9B.cpp:68:8:错误:在"气泡排序"之前应为";"

liux1780_9B.cpp:在全局范围内:

liux1780_9B.cpp:76:1:错误:模板名称"std::vector"的使用无效没有参数列表 矢量气泡排序(矢量项) { ^编译失败。

这是代码:

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <algorithm>
#include <vector>
using namespace std;
vector bubblesort(vector<item>);
class item
{
    private:
        int numItem;
        string itemName;
    public:
        item(int numItem, string itemName)
        {
            this->numItem = numItem;
            this->itemName = itemName;
        }
        int getnumItem()
        {
            return numItem;
        }
        string getitemName()
        {
            return itemName;
        }
        bool operator<(item r) 
        {
            return this->getnumItem() < r.getnumItem();
        }
};

int main()
{
    string fileName;
    cin >> fileName;
    ifstream fin;
    fin.open(fileName.c_str());
    if (fin.fail())
    {
        cout << "Input file opening failed.n";
        exit(1);
    }
    ofstream fout;
    fout.open(fileName.c_str());
    if (fout.fail())
    {
        cout << "Output file opening failed.n";
        exit(1);
    }
    int count;
    string name;
    vector<item> list;
    while (fin >> name)
    {
        fin >> count;   
        list.push_back(item(count, name));
    }
vector bubblesort(vector<item>);
    fin.close();
    fout.close();
    return 0;
}
vector bubblesort(vector<item>) {
    int temp;
    bool finished = false;
    while (!finished)    {
    finished = true;
    for (int i = 0; i < item.size()-1; i++) {
      if (item[i] > item[i+1]) {
         temp = item[i];
         item[i] = item[i+1];
         item[i+1] = temp;
         finished=false;
          }
        }
     }
    return item; 
}

首先,您需要在将其用作 vector 的模板参数之前转发声明您的 item 类。

class item;

然后你需要确保返回vector也有一个类型

vector<item> bubblesort(vector<item>);

同样在你的函数本身中,你需要给参数变量一个名字并使用该变量

vector<item> bubblesort(vector<item> items)
{
    \ do stuff with items
}

您还应该考虑将初始向量作为const引用传递以避免复制,因为无论如何您都会返回一个新向量。或者传入对向量的非const引用并就地修改它。