我有一个非常简单的项目。文件main.cpp创建一个浮点向量,对其进行排序,然后将其打印。
我用以下命令编译它:
g++ main.cpp quickSort.cpp
如果在main.cpp中,我更改了
#include "quickSort.h"
到
#include "quickSort.cpp"
它工作正常。
如何更改此项目,使其与头文件一起使用?
main.cpp
#include <iostream>
#include <random>
#include <vector>
#include "quickSort.h"
#define MODULO 200
#define SIZE 1500
int main(){
std::vector<float> data;
for(int i=0;i<SIZE;i++)
data.push_back(rand()%MODULO);
data=quickSort(data);
for(int i=0;i<data.size();i++){
std::cout<<data[i]<<',';
}
std::cout<<'\n';
return 0;
}
quickSort.cpp
#include <vector>
template<typename T>
std::vector<T> quickSort(std::vector<T> data){
if(data.size()==0)return data;
int pivot=data[data.size()/2];
std::vector<T> a;
std::vector<T> b;
std::vector<T> c;
std::vector<T> ret;
for(int i=0;i<data.size();i++){
if(data[i]<pivot)a.push_back(data[i]);
if(data[i]==pivot)b.push_back(data[i]);
if(data[i]>pivot)c.push_back(data[i]);
}
a=quickSort(a);
c=quickSort(c);
for(int i=0;i<a.size();i++)ret.push_back(a[i]);
for(int i=0;i<b.size();i++)ret.push_back(b[i]);
for(int i=0;i<c.size();i++)ret.push_back(c[i]);
return ret;
}
quickSort.h
#include <vector>
template<typename T>
std::vector<T> quickSort(std::vector<T> data);