рд╕реА рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреАрдврд╝реА

рдпрджрд┐ рдЖрдк C рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдВрдЯреЗрдирд░ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╣реИрдВ, рддреЛ рдмрд┐рд▓реНрд▓реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ:

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЧреИрд░-рддреБрдЪреНрдЫ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдЧреИрд░-рддреБрдЪреНрдЫ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЖрдзреБрдирд┐рдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкрд░рдорд╛рдгреБ рд╣рдерд┐рдпрд╛рд░реЛрдВ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╡реНрдпрд╛рдкрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ, рдЬреЛ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╢реБрджреНрдз рд╕реА рдкрд░ рд╕реНрд╡рд░реНрдЧ рд╕реЗ рдкреГрдереНрд╡реА рдкрд░ рдЧрд┐рд░рдиреЗ рдкрд░, рд╕рднреНрдпрддрд╛ рдХреЗ рдпреЗ рд╕рднреА рд▓рд╛рдн рджреБрд░реНрдЧрдо рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЕрдХреНрд╕рд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╕реА рдореЗрдВ рдХреБрдЫ рд▓рд┐рдЦреЗрдВ, рдХреБрдЫ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрд┐рдд рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╣рд░ рдмрд╛рд░ рд╡рд░реНрдЧ рдкрд╣рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкрд╣рд┐рдпрд╛ рдХреЛ рдордЬрдмреВрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдиреЗ рдореЗрд░реА рдЖрддреНрдорд╛ рдХреЛ рдЦрд┐рд▓рд╛рдпрд╛, рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЬрдирд░реЗрдЯрд░ (рдЬреЛ рдХрд┐ рдПрдХ рдмрдбрд╝реЗ рдСрдЯреЛрдХреИрдХреН рд╕ рдкреИрдХреЗрдЬ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ) рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд╛рдИрдкреА рдХреЗ рдЦрд░рд╛рдм рд╣реЛ рдЪреБрдХреЗ рдирд╛рд░рдЬрд╝рди рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рдмрд╛рд░ рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

C рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдХрдВрдЯреЗрдирд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, gpointer рд╕реЗ, рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдкрд░ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ - рдмрд┐рдирд╛ gpointer рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ, рдЪреВрдВрдХрд┐ C рдореЗрдВ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП "рдИрдорд╛рдирджрд╛рд░" рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдПрдХ рднрдпрд╛рдирдХ рдорд┐рд╢реНрдо рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рд╕рдордЭрдирд╛ рдФрд░ рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореМрдЬреВрджрд╛ рд╕рдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВред рдпрд╣реА рд╣реИ, рд╕реА ++ рдФрд░ рдЬрд╛рд╡рд╛ рдФрд░ рддреАрд╡реНрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдПрд╕рдЯреАрдПрд▓ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рдордВрдЬрд╕реНрдп рдФрд░ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдХреБрдЫ рднреА рдорд╛рдирдХ рд╕реА рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рд▓реЗрдЦ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреАрдврд╝реАред рддрддреНрд╡реЛрдВ рдХреА рд╕рдЦреНрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рдЬреЛ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддрд╛ рд╣реИред

рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рд░реВрдмреА рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдПрдХ рд░реВрдмреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИред рдЬрдирд░реЗрдЯрд░ рдХреЗ рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕реА рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ (рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлрд╝рд╛рдЗрд▓) рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ; рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлрд╝рд╛рдЗрд▓ рд╕рдВрдХрд▓рд┐рдд рд╣реИ рдФрд░ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рддреЗ рд╣реИрдВред

рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдБ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ:



рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдирд░ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ C ++ "рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ" рдХреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╕рдордп "рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ" рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
 std::list  std::list      ). 

, , . , , , copy-on-write .. , - , , , ..

AutoC , std::unordered_set ++.

(set), :
require "autoc" CodeBuilder::CModule.generate!("containers") do |m| m << DataStructBuilder::HashSet.new("IntSet", {:type=>"int"}) end


IntSet :
... typedef struct IntSet IntSet; struct IntSet {...} ... void IntSetCtor(IntSet*); void IntSetDtor(IntSet*); void IntSetPut(IntSet*, int); ...

IntSet :
#include <stdio.h> #include "containers_auto.h" int main(int argc, char** argv) { IntSet set; IntSetCtor(&set); IntSetPut(&set, 0); IntSetPut(&set, 1); IntSetPut(&set, 0); printf("size(set)=%d\n", IntSetSize(&set)); printf("contains(1)==%d\n", IntSetContains(&set, 1)); IntSetDtor(&set); return 0; }

; , , ( API ). , , .
, .

PS
.
std::list std::list ).

, , . , , , copy-on-write .. , - , , , ..

AutoC , std::unordered_set ++.

(set), :
require "autoc" CodeBuilder::CModule.generate!("containers") do |m| m << DataStructBuilder::HashSet.new("IntSet", {:type=>"int"}) end


IntSet :
... typedef struct IntSet IntSet; struct IntSet {...} ... void IntSetCtor(IntSet*); void IntSetDtor(IntSet*); void IntSetPut(IntSet*, int); ...

IntSet :
#include <stdio.h> #include "containers_auto.h" int main(int argc, char** argv) { IntSet set; IntSetCtor(&set); IntSetPut(&set, 0); IntSetPut(&set, 1); IntSetPut(&set, 0); printf("size(set)=%d\n", IntSetSize(&set)); printf("contains(1)==%d\n", IntSetContains(&set, 1)); IntSetDtor(&set); return 0; }

; , , ( API ). , , .
, .

PS
.
 std::list  std::list      ). 

, , . , , , copy-on-write .. , - , , , ..

AutoC , std::unordered_set ++.

(set), :
require "autoc" CodeBuilder::CModule.generate!("containers") do |m| m << DataStructBuilder::HashSet.new("IntSet", {:type=>"int"}) end


IntSet :
... typedef struct IntSet IntSet; struct IntSet {...} ... void IntSetCtor(IntSet*); void IntSetDtor(IntSet*); void IntSetPut(IntSet*, int); ...

IntSet :
#include <stdio.h> #include "containers_auto.h" int main(int argc, char** argv) { IntSet set; IntSetCtor(&set); IntSetPut(&set, 0); IntSetPut(&set, 1); IntSetPut(&set, 0); printf("size(set)=%d\n", IntSetSize(&set)); printf("contains(1)==%d\n", IntSetContains(&set, 1)); IntSetDtor(&set); return 0; }

; , , ( API ). , , .
, .

PS
.
std::list std::list ).

, , . , , , copy-on-write .. , - , , , ..

AutoC , std::unordered_set ++.

(set), :
require "autoc" CodeBuilder::CModule.generate!("containers") do |m| m << DataStructBuilder::HashSet.new("IntSet", {:type=>"int"}) end


IntSet :
... typedef struct IntSet IntSet; struct IntSet {...} ... void IntSetCtor(IntSet*); void IntSetDtor(IntSet*); void IntSetPut(IntSet*, int); ...

IntSet :
#include <stdio.h> #include "containers_auto.h" int main(int argc, char** argv) { IntSet set; IntSetCtor(&set); IntSetPut(&set, 0); IntSetPut(&set, 1); IntSetPut(&set, 0); printf("size(set)=%d\n", IntSetSize(&set)); printf("contains(1)==%d\n", IntSetContains(&set, 1)); IntSetDtor(&set); return 0; }

; , , ( API ). , , .
, .

PS
.
 std::list  std::list      ). 

, , . , , , copy-on-write .. , - , , , ..

AutoC , std::unordered_set ++.

(set), :
require "autoc" CodeBuilder::CModule.generate!("containers") do |m| m << DataStructBuilder::HashSet.new("IntSet", {:type=>"int"}) end


IntSet :
... typedef struct IntSet IntSet; struct IntSet {...} ... void IntSetCtor(IntSet*); void IntSetDtor(IntSet*); void IntSetPut(IntSet*, int); ...

IntSet :
#include <stdio.h> #include "containers_auto.h" int main(int argc, char** argv) { IntSet set; IntSetCtor(&set); IntSetPut(&set, 0); IntSetPut(&set, 1); IntSetPut(&set, 0); printf("size(set)=%d\n", IntSetSize(&set)); printf("contains(1)==%d\n", IntSetContains(&set, 1)); IntSetDtor(&set); return 0; }

; , , ( API ). , , .
, .

PS
.
std::list std::list ).

, , . , , , copy-on-write .. , - , , , ..

AutoC , std::unordered_set ++.

(set), :
require "autoc" CodeBuilder::CModule.generate!("containers") do |m| m << DataStructBuilder::HashSet.new("IntSet", {:type=>"int"}) end


IntSet :
... typedef struct IntSet IntSet; struct IntSet {...} ... void IntSetCtor(IntSet*); void IntSetDtor(IntSet*); void IntSetPut(IntSet*, int); ...

IntSet :
#include <stdio.h> #include "containers_auto.h" int main(int argc, char** argv) { IntSet set; IntSetCtor(&set); IntSetPut(&set, 0); IntSetPut(&set, 1); IntSetPut(&set, 0); printf("size(set)=%d\n", IntSetSize(&set)); printf("contains(1)==%d\n", IntSetContains(&set, 1)); IntSetDtor(&set); return 0; }

; , , ( API ). , , .
, .

PS
.

Source: https://habr.com/ru/post/In171339/


All Articles