public int CompareTo(Book book)
{
if (book != null)
{
int r = name.CompareTo(book.name);
if (r != 0)
return r;
r = author.CompareTo(book.author);
if (r != 0)
return r;
return Math.sign(releaseDate - book.releaseDate);
}
else
{
throw new Exception("Невозможно сравнить два объекта");
}
}
const int NAME = 0, AUTHOR = 1, COUNT = 2;
class ByName : Comparer<Book> {}
class ByAuthor : IComparer<Book> {}
Comparer<Book> comparers[COUNT] = { new ByName(), new ByAuthor() };
const int S_NAME = 0, S_AUTHOR = 1, S_COUNT = 2;
const int I_DATE = 0;
public class Book
{
string stringFields[S_COUNT];
int intFields[I_COUNT];
public string name {
get { return stringFields[S_NAME; ] }
set { stringFields[S_NAME] = value; }
}
}
class StringComparer : IComparer<Book> {
int code;
StringComparer(int aCode) { code = aCode; }
int Compare(Book a, Book b) { return a.stringFields[code].compareTo(b.stringFields[code]); }
}
const int ALL_NAME = 0, ALL_AUTHOR = 1, ALL_DATE=2, ALL_COUNT = 3;
Comparer<Book> comparers[ALL_COUNT] = {
new StringComparer(S_NAME), new StringComparer(S_AUTHOR), new IntComparer(I_DATE) };
<?xml version="1.0"?>
<Book isbn="1234"
pfx:cover="hard"
xmlns="http://www.library.com"
xmlns:pfx="http://www.library.com">
<Title>Sherlock Holmes</Title>
<Author>Arthur Conan Doyle</Author>
</Book>
enum {
SURROGATE_MIN = 0xD800,
SURROGATE_MAX = 0xDFFF,
SURROGATE_LO_MIN = SURROGATE_MIN,
SURROGATE_HI_MIN = 0xDC00,
SURROGATE_LO_MAX = SURROGATE_HI_MIN - 1,
SURROGATE_HI_MAX = SURROGATE_MAX,
UNICODE_MAX = 0x10FFFF,
U8_1BYTE_MAX = 0x7F,
U8_2BYTE_MIN = 0x80,
U8_2BYTE_MAX = 0x7FF,
U8_3BYTE_MIN = 0x800,
U8_3BYTE_MAX = 0xFFFF,
U8_4BYTE_MIN = 0x10000,
U8_4BYTE_MAX = UNICODE_MAX,
U16_1WORD_MAX = 0xFFFF,
U16_2WORD_MIN = 0x10000,
U16_2WORD_MAX = UNICODE_MAX,
};
void str::putCpNe (char*& p, unsigned long aCp)
{
if (aCp <= U8_2BYTE_MAX) { // 1 or 2 bytes, the most frequent case
if (aCp <= U8_1BYTE_MAX) { // 1 byte
*(p++) = static_cast<char>(aCp);
} else { // 2 bytes
*(p++) = static_cast<char>((aCp >> 6) | 0xC0);
*(p++) = static_cast<char>((aCp & 0x3F) | 0x80);
}
} else { // 3 or 4 bytes
if (aCp <= U8_3BYTE_MAX) { // 3 bytes
*(p++) = static_cast<char>( (aCp >> 12) | 0xE0);
*(p++) = static_cast<char>(((aCp >> 6) & 0x3F) | 0x80);
*(p++) = static_cast<char>( (aCp & 0x3F) | 0x80);
} else { // 4 bytes
*(p++) = static_cast<char>(((aCp >> 18) & 0x07) | 0xF0);
*(p++) = static_cast<char>(((aCp >> 12) & 0x3F) | 0x80);
*(p++) = static_cast<char>(((aCp >> 6) & 0x3F) | 0x80);
*(p++) = static_cast<char>( (aCp & 0x3F) | 0x80);
}
}
}
void str::appendCp(std::string & s, unsigned long aCp)
{
char c[5];
char* end = c;
putCpNe(end, aCp);
s.append(c, end);
}
namespace str{
enum {
SURROGATE_MIN = 0xD800,
SURROGATE_MAX = 0xDFFF,
SURROGATE_LO_MIN = SURROGATE_MIN,
SURROGATE_HI_MIN = 0xDC00,
SURROGATE_LO_MAX = SURROGATE_HI_MIN - 1,
SURROGATE_HI_MAX = SURROGATE_MAX,
UNICODE_MAX = 0x10FFFF,
U8_1BYTE_MAX = 0x7F,
U8_2BYTE_MIN = 0x80,
U8_2BYTE_MAX = 0x7FF,
U8_3BYTE_MIN = 0x800,
U8_3BYTE_MAX = 0xFFFF,
U8_4BYTE_MIN = 0x10000,
U8_4BYTE_MAX = UNICODE_MAX,
U16_1WORD_MAX = 0xFFFF,
U16_2WORD_MIN = 0x10000,
U16_2WORD_MAX = UNICODE_MAX,
};
template <int Len>
void putCpNeT (wchar_t*& p, unsigned long aCp);
/// Puts a code-point in wchar_t encoding, w/o error-checking
/// @param [in,out] p position to put to
/// @param [in] aCp code-point, surely valid
inline void putCpNe (wchar_t*& p, unsigned long aCp)
{ putCpNeT<sizeof(wchar_t)>(p, aCp); }
} // namespace str
template <>
void str::putCpNeT<2> (wchar_t*& p, unsigned long aCp)
{
if (aCp < U16_2WORD_MIN) { // 1 word
*(p++) = static_cast<wchar_t>(aCp);
} else if (aCp <= U16_2WORD_MAX) { // 2 words
aCp -= U16_2WORD_MIN;
// Hi word
const wchar_t lo10 = aCp & 0x3FF;
const wchar_t hi10 = aCp >> 10;
*(p++) = static_cast<wchar_t>(0xD800 | hi10);
*(p++) = static_cast<wchar_t>(0xDC00 | lo10);
}
}
void str::appendCp(std::wstring& s, unsigned long aCp)
{
wchar_t c[5];
wchar_t* end = c;
putCpNe(end, aCp);
s.append(c, end);
}
q := X1 / X2;
if abs(q - Round(q)) < 1e-5 then ...
type
TRatio = record
Num, Den : integer;
end;
var
X1 : integer = 100;
X2 : integer = 20;
if X1 mod X2 = 0 then ...
type
TDecFloat = record
mantissa : uint64; // например, от 1e17 до 1e18
order : integer;
sign : boolean;
end;
template<>
.template class std::vector<int>
.AsynchronousReader::init
было бы ошибкой держать inline’ом. По-хорошему, его надо в CPP. Но это довольно небольшая часть кода.// H
template <int x>
void foo () { std::cout << x << std::endl; }
extern template void foo<2>();
// CPP
template void foo<2>();
int c; int r[]; int s[];
или int c, r[], s[];
. Но в любом случае перед нами статический массив и ему надо дать размер.void doSmth(int a[]) {} // передаём в функцию отрезок памяти неизвестной длины
int x[5];
doSmth(x);
extern int b[]; // компилятор рассматривает b как отрезок памяти неизвестной длины.
int b[5]; // …и только линкер подставит на место b настоящий массив
int[] x = new int[5]; // повторяю, это не Си++, а Java!
function NormalizeEol(const s : string) : string;
begin
Result := StringReplace(s, #13#10, #10, [rfReplaceAll]);
Result := StringReplace(Result, #13, #10, [rfReplaceAll]);
Result := StringReplace(Result, #10, #13#10, [rfReplaceAll]);
end;
class Node {
List<Node> children;
List<Leaf> leaves;
}
class Leaf {
// в нём может быть что угодно
}
class Tree {
Node root;
}
Tree tree;
Dictionary<string, Node> idDic; // считается, что словарь нужен только на разбор JSON,
// и он временный
for(size_t z = 0; z < b.length(); z++){
if(a.find(b[z]) != std::string::npos){
std::vector<int>
. Си++.int sum = 0;
for (int v : vec)
sum += v;
std::cout << sum << std::endl;
class Accumulator
{
public:
void feed(int value) { fSum += value; }
int sum() const { return fSum; }
private:
int fSum = 0;
}
Accumulator acc;
for (int v : vec)
acc.feed(vec);
std::cout << acc.sum() << std::endl;
int sum = std::accumulate(vec.begin(), vec.end(), 0);
std::cout << sum << std::endl;
printf("%d\n", (int)(sizeof(int) * 8));