multimap::equalrange()
Ez a példaprogram a multimap equalrange() függvényének használatán keresztül mutatja be a nyelv újdonságait.
A példakód eredetije C++03-ban íródott, amely megtalálható a
cplusplus.com-on.
A példakód C++03-ban megírt változata:
#include
#include
A példakód C++11-ben megírva:
#include
#include
Forrás
Bill parser
A program egy szöveges formátumban kapott számlát parse-ol egy számla objektumba, reguláris kifejezések használatával.
A program a C++11 új regexp szabványos könyvtárának használatát hivatott demózni.
A Gcc 4.7-es változata még nem teljes mértékben implementálja a regexp library-t, a reguláris kifejezésekben megadott karakterosztályok, illetve '[ ]' között megadott karakterhalmazok futási idejű hibát eredményeznek. (2012 júniusi állapot.)
// ...
regex rmId (R"DELIM(^.+ Invoice (SML-(\w|-)+).*$)DELIM");
// ...
auto it = text.cbegin();
Bill bill = Bill();
while(!regex_match(*it, rmId)) {
++it;
if (text.end() == it) { // the parsed bill has a wrong format
return bill;
}
}
bill.id = regex_replace(*it, rmId, string("$1"));
// ...
Forrás
Példaprogramok Conceptekre
A következő példaprogramok a készülő szabvány concept-ekre vonatkozó terveit mutatják be. Az új szabványba végül nem kerültek bele ezek a feature-ök, gy ezek a példakódok sem szabványos C++11 kódok!
MyArray osztály
class OutOfRange: public std::exception
{};
template
class MyArray
{
public:
MyArray()
{}
MyArray(const std::initializer_list& init)
//initializer list constructor: MyArray<5, int> mya = {0, 1, 2, 3};
{
for(int i(0); i
concept_map Range> //no ' ' in >>
{
typedef T* range_iterator::type;
typedef T value_type;
//begin and end are correct
};
/*
* Describing how MyArray fulfills Container concept's restrictions,
* so it can be used in standard algorithms efficiently
*/
template
concept_map Container>
{
typedef T value_type;
typedef T* iterator;
typedef const T* const_iterator;
typedef T& reference;
typedef const T& const_reference;
//... more types
//begin, end correct
bool empty() //array is always full -> never empty
{
return false;
}
unsigned size() //its size is always its maximum
{
return size;
}
unsigned max_size()
{
return size;
}
}
Forrás
Mátrix osztály
/*
* Defining a concept so we can work with T as numbers
* We reuse the LessThanComparable standard concept to reduce complexity
*/
auto concept Number
{
T operator+(const T&, const T&);
T& operator+=(T&, const T&);
//...
};
/*
* Type param fulfills Number concept
*/
template
class Matrix
{
public:
Matrix(unsigned row, unsigned col): row(row), col(col)
{
Create();
}
/*
* Rvalue constructor: efficient copying of temporaly objects
*/
Matrix(Matrix&& oth): row(oth.Row()), col(oth.Col())
{
Create();
T** tmp = matr;
matr = oth.matr;
oth.matr = tmp;
}
~Matrix()
{
for(int i(0); i<row; ++i)
delete[] matr[i];
delete[] matr;
}
/*
* Type parameter can be called by operator(), maybe through concept_map
*/
template
void Apply(Func func)
{
for(int i(0); i<row; ++i)
for(int j(0); j<row; ++j)
func(matr[i][j]);
}
T& operator()(unsigned r, unsigned c)
{
return matr[r][c];
}
inline Row() const
{ return row; }
inline Col() const
{ return col; }
private:
T** matr;
unsigned row, col;
void Create()
{
matr = new T[row];
for(int i(0); i<row; ++i)
matr[i] = new T[col];
}
};
Forrás