Tôi hoàn toàn đồng ý với các tuyên bố mà những người đã đăng ở trên. Nhưng cách tốt nhất để học những điều mới là gì? Chào!!!! chắc chắn không đọc văn bản và học thuộc lòng nhưng .... VÍ DỤ: D Như Gần đây tôi đã đắm mình trong container quy định tại STL, đây là mã kiểm tra nhanh chóng mà là tự giải thích, tôi hy vọng:
#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());
}
}
Và mã cho 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;
};
Dưới đây là kết quả khi không tối ưu hóa được sử dụng (g ++ --std = C++ 11 file.cpp -o a.ou t):
mảng phân bổ 0,958443 MB
hành động kiểu mảng mất: 183ms
hành động loại vector mất: 316ms
hành động danh sách loại mất: 725ms
hành động loại deque mất: 436ms
và tối ưu hóa (g ++ -O3 --std = C++ 11 tệp.cpp -o a.out):
mảng phân bổ 0.958443 MB
hành động kiểu mảng mất: 55ms
hành động loại vector mất: 57ms
hành động danh sách loại mất: 264ms
hành động loại deque mất: 67ms
Chú ý rằng mặc dù vector và mảng có tương tự lần phân loại cho trường hợp này, kích thước mảng bị giới hạn vì nó được cho là được khởi tạo trên ngăn xếp (theo mặc định, không sử dụng phân bổ của riêng v.v.)
Vì vậy, nó cũng phụ thuộc vào việc bạn sử dụng tối ưu hóa cho trình biên dịch. thấy sự khác biệt đáng chú ý.
Cảm ơn tất cả các bạn ... Tôi không biết danh sách :: sắp xếp, tôi bây giờ. –