Ich bin absolut einverstanden mit den Aussagen, die die Jungs oben gepostet haben. Aber was ist der beste Weg, um neue Dinge zu lernen? Hallo!!!! sicherlich nicht den Text und Auswendiglernen zu lesen, aber .... Beispiele: D Wie kürzlich eingetaucht ich in Containern in STL angegeben, hier ist der Schnelltest-Code, den selbsterklärend ist, hoffe ich:
#include <iostream>
#include <vector>
#include <deque>
#include <array>
#include <list>
#include <iterator>
#include <cstdlib>
#include <algorithm>
#include "Timer.h"
constexpr int SIZE = 1005000;
using namespace std;
void test();
int main(){
cout<<"array allocates "<<static_cast<double>(SIZE)/(1024*1024)<<" MB\n";
test();
return 0;
}
void test(){
int values[SIZE];
int size = 0;
//init values to sort:
do{
values[size++] = rand() % 100000;
}while(size < SIZE);
//feed array with values:
array<int, SIZE> container_1;
for(int i = 0; i < SIZE; i++)
container_1.at(i) = values[i];
//feed vector with values
vector<int> container_2(begin(values), end(values));
list<int> container_3(begin(values), end(values));
deque<int> container_4(begin(values), end(values));
//meassure sorting time for containers
{
Timer t1("sort array");
sort(container_1.begin(), container_1.end());
}
{
Timer t2("sort vector");
sort(container_2.begin(), container_2.end());
}
{
Timer t3("sort list");
container_3.sort();
}
{
Timer t4("sort deque");
sort(container_4.begin(), container_4.end());
}
}
Und der Code für timer:
#include <chrono>
#include <string>
#include <iostream>
using namespace std;
class Timer{
public:
Timer(string name = "unnamed") : mName(name){ mStart = chrono::system_clock::now();}
~Timer(){cout<<"action "<<mName<<" took: "<<
chrono::duration_cast<chrono::milliseconds>(
chrono::system_clock::now() - mStart).count()<<"ms"<<endl;}
private:
chrono::system_clock::time_point mStart;
string mName;
};
Hier ist das Ergebnis, wenn keine Optimierung verwendet wird (g ++ --std = C++ 11 file.cpp -o a.ou t):
Array ordnet 0,958443 MB
Aktion sort Array hat: 183ms
Aktion sort Vektor hat: 316ms
Aktion Sortierliste hat: 725ms
Aktion sort Deque nahm: 436ms
und Optimierung (g ++ -O3 --std = C++ 11 file.cpp -o a.out):
Array ordnet 0.958443 MB
Aktion sort Array nahm: 55ms
Aktion Art Vektor nahm: 57ms
Aktion Sortierliste nahm: 264ms
Aktion sort deque nahm: 67ms
Beachten Sie, dass obwohl Vektor- und Array ähnlich Bei der Sortierung für diesen Fall ist die Array-Größe begrenzt, da sie auf dem Stack initialisiert werden soll (standardmäßig keine eigenen Allokatoren usw.).
Es hängt also auch davon ab, ob Sie die Optimierung für den Compiler verwenden, wenn nicht erkennbaren Unterschied sehen.
Danke euch allen ... Ich war mir der Liste nicht bewusst: sort, ich bin jetzt. –