I'm not the author of this code, just found it on my old computer.(googlefu for "unsigned short int choice; // SELECTION FROM " points to this page , so I guess this is the author )
Anyway, the code is simple and performs quite fast.
I just commented out some unnecessary stuff , such as "system("cls")" and "system("pause")"

Code:
#include <iostream>
#include <string>
#include <time.h>
#include <stdlib.h>
#include <fstream>
using namespace std;

int main()
{   // DATA ENTRY BEGIN --------------------------------------------------------
    //system("cls");
    unsigned short int error=0;
    string poss;//POSSIBLE CHARACTER COMBINATIONS
    unsigned short int pass;//MAXIMUM PASSWORD LENGTH
    string password; //ACTUAL PASSWORD
    unsigned short int found=0;
    
    cout << "SELECT CHARACTER SET:\n\n";
    cout << "\t1. abcdefghijklmnopqrstuvwxyz\n";
    cout << "\t2. ABCDEFGHIJKLMNOPQRSTUVWXYZ\n";
    cout << "\t3. 0123456789\n\n";
    cout << "\t4. 1&2\n";
    cout << "\t5. 1&2&3\n";
    cout << "\t6. Other\n\t";
    cout << "----------------------------------\n\t";
    
    unsigned short int choice; // SELECTION FROM CHARACTER SET
    string dataset; //STRING FOR CHARACTER SET
    cin >> choice;    
    
    switch ( choice ) {
    
      case 1 : 
        // Process for test = 1
        dataset="abcdefghijklmnopqrstuvwxyz";
        break;
    
      case 2 : 
        // Process for test = 5
        dataset="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        break;
    
      case 3 : 
        // Process for test = 5
        dataset="0123456789";
        break;
    
      case 4 : 
        // Process for test = 5
        dataset="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        break;
        
      case 5 : 
        // Process for test = 5
        dataset="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        break;
    
      case 6 : 
        // Process for all other cases.
        cout << "\nENTER YOUR OWN CHARACTER SET: ";
        cin >> dataset;
        break;
        
      default :
        error=1;
    
    }
    if(error==0){
        poss=dataset;
        
        cout << "\nENTER PASSWORDS MAXIMUM LENGTH: ";
        cin >> pass;
        
        unsigned short int i=0;
        while(poss[i])
        {
                      i++;
        }
            
        int pass_array[pass-1];
        unsigned short int j=0;
        while(j<pass)
        {
                      pass_array[j]=0;
                      j++;
        }
        
        unsigned short int comb_max=i-1; // SIZE OF COMBINATIONS ARRAY
        signed short int pass_max=j-1; // MAXIMUM SIZE OF PASSWORD
        
        signed short int pointer; //POINTER WILL EQUAL THE CURRENT PASS SIZE
        // THIS ENABLES THE FLOATING POINT TO CHANGE THE COMBINATIONS
        
        unsigned int counter=0; // COUNTER FOR EACH COMBINATION TRY
        
        // DATA ENTRY END ----------------------------------------------------------
        
        // OPENS THE TEXT FILE TO WRITE PASSWORDS TO
        ofstream myfile;
        myfile.open ("passwords.txt");
        // -----------------------------------------    
        
        // ---- start timer ----
        time_t start,end;
        double dif;
        time (&start);
        
        while(pass_max>=0)
        {
        do
        {
                 pointer=pass_max;
                 while(pass_array[pointer]<=comb_max)
                 {
                                                     string curr;//  CURRENT PASSWORD TRY
                                                     counter++;
                                                     j=0;
                                                     while(j<=pass_max)
                                                     {
                                                                       curr+= poss[pass_array[j]];
                                                                       j++;
                                                     }
                                                     myfile << curr << " \n";
                                                     pass_array[pointer]=pass_array[pointer]+1;
                 }
                 pass_array[pointer]=0;
                 pointer--;
                 while(pass_array[pointer]==comb_max)
                 {
                                                     pass_array[pointer]=0;
                                                     pointer--;
                 }
                 pass_array[pointer]=pass_array[pointer]+1;
        }
        while(pointer>=0);
        
        pass_max--;
        }
        // ---- end timer ----
        end:
        time (&end);
        dif = difftime (end,start);
        
        // ---- close text file ---- //
        myfile.close();
        // ------------------------- //
        
        // ----- DISPLAY RESULTS ---- //
        unsigned int combinations_per_second;
        combinations_per_second=counter/dif;
        //system("cls");
        cout << "\nWORDLIST CREATED";
        cout << "\n------------------------------";
        cout << "\nRUN TIME:\t " << dif << " sec";
        cout << "\nCOMBINATIONS:\t " << counter;
        cout << "\nCOMB/SEC: \t " << combinations_per_second;
        cout << "\n\n\n";
        //system("pause");
        return 0;
    }else{
        cout << "\tINVALID CHOICE!";
        //system("pause");      
    }   
}
Save the code as "yourfilename.cpp"
To compile :

Code:
g++ yourfilename.cpp -o yourfilename
To run :

Code:
./yourfilename
Have fun!