#include <cmath>
#include <future>
#include <chrono>
#include <iostream>
int main() {
std::future<double> fut = std::async([](double x)->double { return pow(x,2); }, 80);
fut.wait();
std::shared_future<double> shared = fut.share();
std::cout << shared.get() << std::endl;
return 0;
}
金曜日, 8月 22, 2014
std::future
JavaのFutureとほぼ同様の機能を持つ,std::futureがC++11では利用可能である.
月曜日, 8月 18, 2014
STL - partial_sort
STLのalgorithmにはpartial_sort()が用意されており,部分的にソートを適用することが出来る.
第一引数は開始要素,第二引数はソートを適用する上限,第三引数は終端要素.
第一引数は開始要素,第二引数はソートを適用する上限,第三引数は終端要素.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> v{ 25, 80, 12, 5, 50, 61, 24, 37, 45, 70 };
partial_sort(v.begin(), v.begin() + 3, v.end());
for_each(v.begin(), v.end(), [](int x)->void { cout << x << endl; });
return 0;
}
結果
5 12 24 80 50 61 25 37 45 70
日曜日, 8月 17, 2014
auto_ptrからunique_ptrへ移行
auto_ptrは既にdeprecatedとされており,短所もご存じの通りかと思う.(こちらはその短所を簡潔に良くまとめている)
auto_ptrからunique_ptrへの移行は非常に簡単である.
以下の例はauto_ptrの代わりにunique_ptrを使用して簡単なツリーをインオーダ順で走査するコード.
tree.h
tree.cpp
auto_ptrからunique_ptrへの移行は非常に簡単である.
以下の例はauto_ptrの代わりにunique_ptrを使用して簡単なツリーをインオーダ順で走査するコード.
tree.h
#ifndef __TREEPRJ_TREE_H__
#define __TREEPRJ_TREE_H__
#include <string>
#include <memory>
#include <iostream>
class Node {
public:
Node(int idVal, std::string nameVal) :id(idVal), name(nameVal){}
virtual ~Node() { std::cout << "ID[" << id << "] is being released" << std::endl; }
int id;
std::string name;
std::unique_ptr<Node> l;
std::unique_ptr<Node> r;
};
class Tree {
private:
std::unique_ptr<Node> root;
void _add(std::unique_ptr<Node>& n, int id, std::string name);
void _traverseInorder(std::unique_ptr<Node>& n);
public:
Tree(int id, const std::string n);
virtual ~Tree() {}
void add(int id, std::string name);
void traverseInorder();
};
#endif
tree.cpp
#include "tree.h"
#include <iostream>
Tree::Tree(int id, const std::string name) {
root.reset(new Node(id, name));
}
void Tree::add(int id, std::string name) {
_add(root, id, name);
}
void Tree::_add(std::unique_ptr<Node>& n, int newId, std::string newName) {
if ( !n ) return;
if (n->id > newId) {
if (n->l) {
_add(n->l, newId, newName);
}
else {
n->l.reset(new Node(newId, newName));
}
}
else {
if (n->r) {
_add(n->r, newId, newName);
}
else {
n->r.reset(new Node(newId, newName));
}
}
}
void Tree::traverseInorder() {
_traverseInorder(root);
}
void Tree::_traverseInorder(std::unique_ptr<Node>& n) {
if (!n) return;
_traverseInorder(n->l);
std::cout << "ID:" << n->id << ",NAME:" << n->name << std::endl;
_traverseInorder(n->r);
}
int main() {
Tree t(30, "The Colton");
t.add(25, "The Warwick");
t.add(21, "Hawthorne Court");
t.add(45, "Hampton Court Garden");
t.add(15, "The Belvedere");
t.add(50, "Stratford Hall");
t.traverseInorder();
}
登録:
コメント (Atom)