I have a very simple project. The file main.cpp creates a vector of floats, sorts them, then prints them.
I compile it with:
g++ main.cpp quickSort.cpp
If in main.cpp I change
#include "quickSort.h"
to
#include "quickSort.cpp"
it works fine.
How do I change this project so that it works with the header file?
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);