ක්‍රීඩා සඳහා STL, ඔව් හෝ නැත? [වසා ඇත]


146

සෑම ක්‍රමලේඛන භාෂාවකම එහි සම්මත බහාලුම්, ඇල්ගොරිතම සහ වෙනත් ප්‍රයෝජනවත් දේවල් තිබේ. සී #, ජාවා සහ පයිතන් වැනි භාෂාවන් සමඟ, එහි සම්මත ලිබ් නොමැතිව භාෂාව භාවිතා කිරීම ප්‍රායෝගිකව සිතාගත නොහැකිය .

එහෙත්, මම වැඩ කර ඇති බොහෝ C ++ ක්‍රීඩා වලදී, අපි එක්කෝ STL භාවිතා කළේ නැත, එයින් ඉතා සුළු කොටසක් භාවිතා කළේ නැත, නැතහොත් අපගේම ක්‍රියාත්මක කිරීම භාවිතා කළෙමු. එය අපගේ ක්‍රීඩා සඳහා හොඳ තීරණයක්ද, නැතහොත් එස්.ටී.එල්. නොදැනුවත්කමින් ගත් තීරණයක්ද යන්න කීමට අපහසුය.

ඉතින් ... එස්ටීඑල් හොඳ සුදුසුකමක්ද නැද්ද?



1
ඔව්, මා අදහස් කළේ "අපේම ක්‍රියාත්මක කිරීම භාවිතා කිරීම" යන්නයි. :)
අතිවිශිෂ්ට

3
බෙස්ට් ඔෆ් ගේම් ක්‍රමලේඛන මැණික් සොයා ගැනීමට සහ මිලදී ගැනීමට ඔබට අවස්ථාව තිබේ නම්, එය කරන්න. අරීනා නෙට් හි ජේම්ස් බෝයර් විසින් රචිත "ගේම් ක්‍රමලේඛනය තුළ එස්.ටී.එල්. භාවිතා කිරීම" යන මාතෘකාව ඇත. එහිදී ඔහු එස්.ටී.එල්.
චිගුයර්

ජාවා එහි සම්මත ලිබ් නොමැතිව භාවිතා කිරීම සැබවින්ම සිතාගත හැකි ය, එය J2ME ලෙස හැඳින්වේ: p
බාර්ට් වෑන් හියුකෙලොම්

1
නියම ප්‍රශ්නය!
ඇලන්

Answers:


191

මම වෘත්තීය ක්‍රීඩා සංවර්ධනයේ වැඩ කරන විට, එස්ටීඑල් නොමේරූ සහ ඉදිමී තිබුණි. නමුත් එය> මීට වසර 10 කට පෙරය.

දැන් මම මිලිටරි සමාකරණයේ වැඩ කරමි, එය වඩාත් දැඩි කාර්ය සාධන අවශ්‍යතා ඇත (රාමු වැනි සමහර එෆ්පීඑස් වලට වඩා පහළට යා නොහැක). මිලිටරි සමාකරණයේදී STL සෑම තැනකම භාවිතා වේ.

එස්ටීඑල් භාවිතා නොකරන ලෙස ඔබට පවසන සමහර අය එය සැමවිටම පරිපූර්ණ හෝ හොඳම විසඳුම නොවන බවට තර්කය භාවිතා කරති. නමුත් එය ප්‍රශ්නයට පිළිතුරක් නොවේ. ප්‍රශ්නය විය යුත්තේ: ක්‍රීඩා වලදී STL භාවිතා කිරීමේ සහජයෙන්ම වැරැද්දක් තිබේද? මම නොකියමි, STL බොහෝ විට පරිශීලකයෙකු තනිවම ඉදිරිපත් කරන දෙයට වඩා හොඳ ක්‍රියාත්මක කිරීමකි.

ඔබ STL භාවිතා කරන්නේ කෙසේදැයි දැනගෙන ඇති අතර ඔබේ ක්‍රීඩාවේදී එය භාවිතා කරන්න. සමහර පොත් කියවා ඔබ භාවිතා කරන STL හි ක්‍රියාත්මක කිරීමේ කේතය දෙස බලන්න.


49
මෙය ඉතා ස්ථිර උපදේශයකි. “එස්.ටී.එල්. මන්දගාමීයි” යන තේමාව අවම වශයෙන් අවුරුදු පහක්වත් සත්‍ය නොවන අතර බොහෝ දුරට දිගු වේ. "ජාවා මන්දගාමී" සහ ".නෙට් මන්දගාමී" විකාරයක් මෙන් එය දිගටම පවතිනු ඇත, එය තවදුරටත් එසේ නොවන බව සෑම කෙනෙකුටම පෙනෙන තෙක් . වඩා හොඳ වැඩසටහන් ලිවීමට STL ඔබට උදව් කරයි; බොහෝ විට (එම 0.1% කොතැනක හෝ හැර) එය භාවිතා නොකිරීම වගකීම් විරහිත යැයි කීමට තරම් මම යන්නෙමි. (එය ලබා දී ඇති ගැටළු සහිත වසමකට නොගැලපේ යන ප්‍රකාශ බොහෝ විට
එස්.ටී.එල්. නොව ගැටළුව විසඳූ

5
D එඩ් රොපල්: මම සිතන්නේ ගැටලුව එස්.ටී.එල්. ලබා දී ඇති ගැටලුවකට නොගැලපෙන බව නොවේ, ගැටලුව වන්නේ එය බොහෝ ගැටලු වලට ගැලපෙන අතර එමඟින් එහි කේතය ඉතා සංකීර්ණ වේ. මිනිසුන් එස්ටීඑල් අධික ලෙස භාවිතා කරන ආකාරය භයානක වන අතර බොහෝ දෙනෙක් (මා ද ඇතුළුව) එය කිසිසේත් භාවිතා නොකිරීමට එක් හේතුවක් යැයි මම සිතමි. අංක 3 න් විශාලතම දේ ලබා ගන්නේ කෙසේද යන ප්‍රශ්නය බොහෝ කලකට පෙර මා දුටු එක් උදාහරණයක් මෙන්, එක් පිළිතුරක් ඒවා std :: දෛශිකයට තල්ලු කර පසුව std: එය වර්ග කරන්න. එය ඉතා සරල ගැටලුවකට අනවශ්‍ය විසඳුමක් ලබා දීමට නිශ්චිතවම බල කරයි.
සයිමන්

22
Im සිමොන්: නිසි ගෞරවයෙන් යුතුව, අවසාන උදාහරණය අතිශය හෝඩුවාවක් නොමැති බවට ලකුණක් වන අතර, එස්ටීඑල් සමඟ කිසිදු සම්බන්ධයක් නැත ... එම පුද්ගලයා වෙනත් ඕනෑම භාෂාවකින් වර්ග කළ හැකි ලැයිස්තු සමඟ එයම කරයි. එය ඔහුගේ චින්තනය බිඳී ඇත.
ggambett

D එඩ්‍රොපල් පීපීඑම් අනුරූප ලිපිගොනු සඳහා එස්ටීඑල් විග්‍රහයක් ක්‍රියාත්මක කිරීමට උත්සාහ කරයි (P6 හෝ P3 ඉලක්ක කරගන්නේ නම් කේත පේළි 100 කට වඩා අඩුය). එහි if(stream.nextCharacter() == '#') stream.skipLine();
ප්‍රති ing ලයක්

AriDarioOO මම එම ගොනු ආකෘතිය නොදනිමි, නමුත් ප්‍රවාහ ඇඩැප්ටර සහ පෙරහන් යනු එයයි. මම එම අදහස ලියා ඇත්තේ මීට වසර පහකට පෙර, මනස (එය ඉඳහිට නැවත පැමිණේ!), නමුත් මේ දිනවල මම ලියන්නේ ක්‍රියාකාරී, පරිණාමනය මත පදනම් වූ ශෛලියක් තුළ සුපිරි, සුපිරි පරිපූර්ණ විවේචනාත්මක නොවන ඕනෑම දෙයක් සහ ඔබ වැනි ගැටළු විස්තර කරන්නේ ගැටලුවෙන් ගැලවී යාමයි. මම ඇත්තටම මාර්ගය ගණන් ගැන සියලු එතරම් සැලකිල්ලක් (සහ එක් රටකින් හෝ ඔබ කළ යුතු) නො එසේ පැහැදිලි බව, එවිට කාර්ය සාධන කරන්න, මම ක්රියාත්මක කිරීම නිවැරදි භාවය ගැන සැලකිල්ලක්, සහ එවකට ඒ දේවල් කේතය දිග ලෙස.
එඩ් රොපල්

64

මම කියන්නේ, මගේ හිසට ඉහළින්, ඔබට එය භාවිතා කිරීමට අවශ්‍ය නොවන්නේ මන්දැයි ඔබ හරියටම නොදන්නේ නම්, STL භාවිතා කිරීම වඩා හොඳ අදහසකි .

එස්ටීඑල් පිළිබඳ කාරණය මෙන්න: එය ඔබට වඩා දක්ෂ පුද්ගලයින් විසින් වර්ධනය කරනු ලැබේ. එය ආක්‍රමණශීලී හෝ කිසිවක් කිරීමට අදහස් නොකෙරේ, එය STL සංවර්ධනය කරනු ලබන්නේ සැබවින්ම STL ගොඩනැගීම සඳහා වැඩ කරන පුද්ගලයින් විසිනි. එය වේදිකාවට ඉඩ දිය හැකි තරම් ප්‍රායෝගිකව වේගවත් වන අතර සාමාන්‍යයෙන් එය ගෙදර හැදූ විසඳුමකට වඩා ශක්තිමත් වනු ඇත (තවද මෙය අමු වේගය ගැන කරදර වීමට වඩා වැඩි අවධානයක් යොමු කළ යුතුය - ඔබේ ක්‍රීඩාවට අවශ්‍ය නිසා ශක්තිමත් බව ඔබට වේගය අවශ්‍ය ප්‍රමාණයට වඩා ටිකක් වැඩිය; දෙවැන්න කලින් නොමැතිව අර්ථ විරහිත ය).

එස්ටීඑල් විසින් "ලෝකය පිළිබඳ පටු දැක්මක්" බලාත්මක කරන බවට වන පැමිණිලි මට සුළු මෝඩකමක් ලෙස පෙනේ. ඒවා බහාලුම්. බහාලුම්වල සීමිත මෙහෙයුම් සමූහයක් ඇති බැවින් ඒවාට සීමිත මෙහෙයුම් සමූහයක් ඇත. මේ සමඟ නොගැලපෙන ඔබ කරන්නේ කුමක්ද?


4
ඔවුන් STL භාවිතා නොකළ යුත්තේ මන්දැයි කිසිවෙකුට සාධාරණීකරණය කළ යුතු යැයි මම නොසිතමි. 'ඔවුන් ඔබට වඩා දක්ෂ බැවින් එය භාවිතා කරන්න' යන සමස්ත තර්කයටම එකඟ නොවන්න. STL නිර්මාණය කර ඇත්තේ ගැටළු සහිත වසමක නිශ්චිත දෘෂ්ටියක් වටා ය, බහාලුම් පමණක් නොව ඇල්ගොරිතම, විබෙදන්නන්, අනුකාරක, ගති ලක්ෂණ යනාදිය. එය ප්‍රමාණවත් නමුත් එය ගැටළු සහිත වසම දෙස බැලීමේ එකම ක්‍රමය නොවේ
zebrabox

3
සාමාන්‍යයෙන් පරීක්ෂා කරන ලද, ශක්තිමත් ශක්තිමත් කේතයකට වඩා ඔබ ගෙදර හැදූ කේතය කැමතිද? ගැටළු වසම ව්‍යාපෘතියෙන් ව්‍යාපෘතියට වඩා වෙනස් නොවේ (සමහර විට කාවැද්දූ ව්‍යාපෘති හැරුණු විට - කොන්සෝලවල පවා මේ දිනවල හොඳ STL ක්‍රියාත්මක කිරීම් තිබේ!). ක්‍රීඩාව කුමක් වුවත්, ඔබගේ ගැටළුව එතරම් වෙනස් නොවන අතර ඔබ නැව්ගත කිරීමට අදහස් කරන දෙයක් කරන්නේ නම්, ශක්තිමත් කේතයක් ලිවීමේ වගකීම ඔබට ඇත. රෝදය නැවත ක්‍රියාත්මක කිරීමෙන් වඩා හොඳ ශක්තිමත් බවක් සහ නම්‍යතාවයක් ලැබෙනු ඇත්ද? මම "නැහැ" දෙසට නැඹුරු වෙමි. එය “එකම ක්‍රමය” නොවන බව එයින් අදහස් කරන්නේ එය සාමාන්‍යයෙන් උසස් නොවන බවයි.
එඩ් රොපල්

21
මම කියන්නේ ගේම්දෙව් යනු ක්‍රීඩා සෑදීම ගැන , නමුත් හරි. ඔබේ උපකල්පන එතරම් දුර්වල නම්, ඔබ ඒ ආකාරයේ සම්පත් වෙන් කිරීමක් සඳහා කැණීම් කරන්නේ නම්, ඔව්, ඔබ පසුපසට ගොස් ඒවා නැවත ඇගයීමට ලක් කළ යුතුය. නමුත් ඔබට STL භාවිතා කරන අන්ධ ලෙස වේගවත් යෙදුම් කළ හැකිය - සහ, නිසැකවම, වෙනත් ඕනෑම ක්‍රියාත්මක කිරීමක් - ඔබ කරන්නේ කුමක්දැයි ඔබ සැබවින්ම දන්නා විට . ඔබ කරන්නේ කුමක්ද යන්න ඉගෙන ගැනීම> භාණ්ඩ ප්‍රවාහනය STL ප්‍රතික්ෂේප කිරීම. STL සෑම විටම හොඳම පිළිතුර යැයි කිසිවෙකු කීවේ නැත. මම කියන්නේ එය හොඳම පා course මාලාව නොවන්නේ මන්දැයි ඔබට විස්තර කළ නොහැකි නම් , ඔබ STL භාවිතා කළ යුතු බවයි.
එඩ් රොපල්

12
එය කිසිසේත් ප්‍රකෝපකාරී යැයි මම නොසිතමි - එය යමෙකුගේ මතකයේ රැඳී ඇති අයුරින් සකස් කර ඇත, නමුත් එය අතිශයින්ම ගතානුගතික හා ward ජු ස්ථාවරයකි. කෙටියෙන් කිවහොත්: එස්.ටී.එල්. සංවර්ධනය කරන පුද්ගලයින් මෙම ප්‍රශ්නය ඇසිය යුතු බව සොයා ගන්නා කෙනෙකුට වඩා දැනුවත්ව හා වඩා හොඳින් සන්නද්ධව සිටිති. එස්ටීඑල් සුදුසු ද නැද්ද යන්න ඔබට වෙනත් අයෙකුගෙන් විමසීමට සිදුවුවහොත්, ගෙදර හැදූ විසඳුමක් ප්‍රමාණවත් ලෙස සකස් කිරීම සඳහා ඔබට වසම්-විශේෂිත දැනුමක් නොමැති බව නිසැකය.
එඩ් රොපල්

4
"එය වේදිකාවට ඉඩ දිය හැකි තරම් ප්‍රායෝගික වනු ඇත". මෙය නිශ්චිත අසත්‍යයකි, බොහෝ සම්පාදක වෙළෙන්දන්ට එස්ටීඑල් නැවත ලිවීමට කරදර විය නොහැකි බැවින් එය නිශ්චිත ගෘහ නිර්මාණ ශිල්පයෙන් වඩාත්ම කාර්ය සාධනය මිරිකා ගනු ඇත. විශාල O හැර සෙසු කාර්ය සාධන ලක්ෂණ පිළිබඳව STL හට කිසිදු සහතිකයක් නොමැත. කෙසේ වෙතත් සම්පාදක වෙළෙන්දාට එය සෑදීමට අවශ්‍ය තරම් කාර්යක්ෂම හෝ අකාර්යක්ෂම විය හැකිය.
කජ්

36

ක්‍රීඩා සඳහා STL භාවිතා නොකිරීමට හේතු කිහිපයක් මම දැක ඇත්තෙමි.

මතක විබෙදුම් ගැටළු සඳහා, බොහෝ අය මෙය නොදන්නා නමුත් ඔබේ STL බහාලුම් පන්ති සඳහා අභිරුචි විබෙදන්නන් ලිවිය හැකිය. ප්‍රතිපාදන වෙන් කිරීම සිදු කරන්නේ කෙසේද යන්න තීරණය කිරීම සඳහා ඔබ ඔබේ සැකිලි තුළට ඇතුළු කරන මූලික වශයෙන් ප්‍රතිපත්ති පන්ති වේ. මේවා භාවිතා කිරීමෙන් ඔබට සාමාන්‍යයෙන් ඔබේ තේරීමේ වේදිකාවේ මතකයේ ගැටළු ඇතිවිය හැක.

ඇත්ත වශයෙන්ම, ඔබ එස්.ටී.එල් භාවිතා කරන්නේ නම් සහ නූල් සිතියම් වැනි විශාල, දර්ශක නොවන වර්ග වලට ගොළු දේවල් කරන්නේ නම්, එවිට ඔබට ඔබේ අතේ විශාල ගැටළු තිබේ.


ඇත්ත වශයෙන්ම සිතියමෙහි විශාල නොවන දර්ශක වර්ග භාවිතා කිරීම හොඳ භාවිත අවස්ථාවකි. මන්දයත්, ස්ටෑඩ්ලිබ් සිතියම් වල අවලංගු කිරීම් වලංගු නොවන අවශ්‍යතාවයක් ඇති හෙයින් එය ක්‍රියාත්මක කිරීමට බල කරන දර්ශක සහ තනි තනිව වෙන් කරන ලද සිතියම්ගත කළ මූලද්‍රව්‍ය භාවිතා කිරීමට බල කරයි. ක්‍රීඩා සඳහා හොඳම විසඳුම වන්නේ google::sparse_mapතමන්ගේම දෑ භාවිතා කිරීම හෝ ලිවීමයි.
v.oddou

සිතියම not න නොවන්නේ ඇයි?
CoffeDeveloper

23

පෙරනිමි එස්ටීඑල් හි සාධාරණ ගැටළු ගණනාවක් ඇති අතර එය ක්‍රීඩා සමඟ භාවිතා කිරීම දුෂ්කර කරයි, විශේෂයෙන් මතක පෙළගැස්වීමේදී.

ඊඒ එස්ටීඑල් වැනි අභිරුචි කරන ලද ප්‍රභේදයක් ක්‍රීඩා සඳහා වි‍ශේෂයෙන් නිර්මාණය කර ඇති අතර ඔබට වඩා හොඳ මතක ක්‍රියාකාරිත්වයක් සහ කොන්සෝලය භාවිතා කළ හැකිය. එය 2016 දී BSD-3 වගන්තියක් යටතේ GitHub හි ගබඩාවක් සමඟ විවෘත මූලාශ්‍රයක් බවට පත්විය .


19
STL හි මතක භාවිතය සහ ක්‍රීඩා සමඟ ඇති ගැටළු සාමාන්‍යයෙන් අභිරුචි විබෙදුම් පන්ති සමඟ විසඳා ගත හැකිය. ඇත්ත වශයෙන්ම, මගේ පෙර රැකියාවේදී, අපගේ "අභිරුචි" දෛශික පන්තිය std::vectorසුපුරුදු විබෙදුම්කරු අභිබවා යන තුනී එතීමකි .
බ්ලෙයාර් හොලොවේ

1
La බ්ලෙයාර් හොලොවේ: "අභිරුචි විබෙදන්නන් පන්ති මත පදනම් වූ ඒවා නොවේ, උදාහරණ මත පදනම් වූ ඒවා නොවේ. වස්තු තැනීමට හා විනාශ කිරීමට මෙන්ම ඒවා වෙන් කිරීමට වෙන්කරන්නන් අවශ්‍ය වේ. මෙය වෙනම සංකල්ප දෙකක් මිශ්‍ර කිරීමට බල කරයි: වෙන් කිරීම සහ ඉදිකිරීම. මේවායින් කිහිපයක් පමණි අවාසනාවකට මෙන්, stl- වෙන් කරන්නන් සමඟ ඇති ගැටළු. ලිංගාශ්‍රිත රෝග වෙන් කිරීම නරක වීමට තවත් වලංගු හේතු කිහිපයක් EA STL මඟින් සපයයි. එය හුදෙක් "තෙත් කළත් නැතත් ඒවා අභිබවා යා නොහැක".
සයිමන්

Im සිමොන් - එස්ටීඑල් හි විබෙදුම් ක්‍රමය පරිපූර්ණ යැයි මම තර්ක නොකරමි, මන්ද එය එසේ නොවේ. වැඩ කරන විසඳුමක් සොයා ගැනීමට අපට බොහෝ කාලයක් ගත විය. මම කියන්නේ සමහර අවස්ථාවල දී, එය බව ය STL භාවිතා කර ක්රියාත්මක කළ, ක්රීඩාව හිතකාමී විසඳුම සහ විබෙදුම් ඇති, කුඩා වැඩ ලබා ගැනීමට හැකි.
බ්ලෙයාර් හොලොවේ

Im සිමොන් - විස්තාරනය කිරීම සඳහා: එස්.ටී.එල්. අවුල් සහගත වුවත්, එය ඉතා හොඳින් පරීක්ෂා කර ඇති සහ දෝෂ රහිත කේත කැබැල්ලකි; ඔබට එය භාවිතා කළ හැකි නම්, ඔබ අභිරුචි විසඳුමක් නිදොස් කිරීම සඳහා මිනිස් පැය ඉතිරි කරයි. මගේ වර්තමාන රැකියාව එස්.ටී.එල්. ගෙදර හැදූ විබෙදන්නන්ට වාසිදායක වන අතර, එම කේතය සමහරක් නිදොස්කරණය කිරීමට හා නැවත සකස් කිරීමට මට කාලය ගත කිරීමට සිදුවිය, මන්ද එය එස්.ටී.එල්. මෙන් පරිණත මට්ටමට සමාන නොවන බැවිනි.
බ්ලෙයාර් හොලොවේ

1
Im සිමොන්: මම මෙහි සාදයට ටිකක් ප්‍රමාදයි, නමුත් ඔබ එයින් අදහස් කරන දෙයට නිශ්චිත උදාහරණයක් ලබා දෙයිදැයි මට කුතුහලයක් තිබේ. එස්.ටී.එල්. කාර්යක්ෂමව විසඳීමට නොහැකි තරමට විශේෂිත ගැටළුවක් විසඳීමට හොඳ උදාහරණයක් කුමක්ද?
බ්‍රැෆල්

20

මයික් ඇක්ටන් (ස්පිරෝ ද ඩ්‍රැගන්, රැට්චෙට් සහ ක්ලැන්ක් සහ ප්‍රතිරෝධක කීර්තියේ ඉන්සොම්නියැක් ක්‍රීඩා වල එන්ජින් අධ්‍යක්ෂක) මෙහි දී විමසූ විට මේ ගැන කීමට ඇත්තේ කුමක්ද ? ක්‍රීඩාව dev හි භාවිතයට අදාළව පොදුවේ STL සහ Boost යන දෙකම ගැන ඔහුගෙන් විමසන ලදි.

STL / Boost, එය ගේම්දෙව්ට අයත්ද? එහි කොටස් පමණක් නම්, කුමන ඒවාද?

ඔයා මෙතන වෙනස් දේවල් දෙකක් ගැන අහනවා නේද? STL සහ Boost, වෙන වෙනම. නමුත් ඇත්ත වශයෙන්ම, මගේ පිළිතුර එක හා සමානයි: එකකට එක වැරැද්දක් නැත, නමුත් මම ඒවායේ භාවිතය අධෛර්යමත් කරමි. එක්කෝ භාවිතා කිරීමට මිනිසුන් උනන්දු ගැලපෙන වඩා ගැටලුවට විසඳුමක් සොයා ප්රශ්නයක් විසඳුමක්. විසඳුම සෑම විටම අතේ ඇති දත්ත සහ දෘඩාංගවල අවහිරතා යනාදිය සඳහා සුදුසු විය යුතුය. එස්ටීඑල් සහ බූස්ට් යන දෙකටම “ලෝකය” පිළිබඳ අතිශය පටු දැක්මක් ඇති අතර ඒවායේ සුදුසු භාවිතය සීමිතය. ඇත්ත වශයෙන්ම, මම ඔවුන්ව අධෛර්යමත් කරන්නේ ඔවුන් ක්‍රමලේඛකයින් වහාම වැරදි දිශාවකට යොමු කරන නිසා, මම බොහෝ විට කියන්නේ ඔබට අවශ්‍ය යැයි ඔබට හැඟේ නම් එක්කෝ ඔබට අවශ්‍ය යැයි ඔබට වැටහෙන්නේ නැති බවයි.

බොහෝ ගැති ක්‍රීඩා සංවර්ධකයින් C ++ ට වඩා C දෙසට වැඩි උත්සාහයක් ගන්නා බව මම දැක ඇත්තෙමි.


18
සී වෙත වැඩි උත්සාහයක් දැරීමට මම එකඟ නොවෙමි. ක්‍රීඩා සංවර්ධකයින්ගෙන් බහුතරයක් මෙන්ම එස්ඩීකේ ලේඛකයින්ද සී ++ භාවිතා කරයි. ඇත්ත වශයෙන්ම අවසාන ප්‍රධාන C පරිශීලකයා හැඳුනුම්පත වූ අතර කාර්මාක් පවා දැන් C ++ වෙත ගොස් ඇත ...
Goz

83
ඇක්ටන් මහතාගේ ප්‍රකාශය කෙටියෙන් පෙනේ. පොදුවේ ගත් කල, STL යනු එම ගැටළු සඳහා හොඳ සුදුසුකමක් වේ . ඔබ STL ප්‍රවේශය “වැරදි” යැයි පෙනෙන අයුරින් යමක් කිරීමට උත්සාහ කරන්නේ නම්, ඔබේ ප්‍රවේශය නැවත ඇගයීමට ලක් කිරීම සහ ඔබ එය සැබවින්ම දක්ෂ ආකාරයකින් කරන්නේ දැයි බැලීම හොඳ අදහසකි. මගේ අත්දැකීම් අනුව, බොහෝ විට ඔබ එසේ නොවේ. (එය බෙහෙවින් ක්රමවත්ව, එක් රටකින්, හුදෙක් එය මුල පටන් නැවත සිදු කිරීම සඳහා ඔබේ මෙවලම් විසි කරන්න වඩා ප්රශ්නයක් තරයේ ඔබගේ මෙවලම් සන්දර්භය තුළ එය තේරුම් ගැනීම මගින් විසඳා ඇත.)
එඩ් Ropple

50
එස්ටීඑල් සමඟ මගේ අත්දැකීම් බොහෝ දුරට වෙනස් ය. එය කාර්යක්ෂම හා කාලය ඉතිරි කිරීමකි. ඔබේම අච්චු පුස්තකාලයක් හෝ බහාලුම් පුස්තකාලයක් රෝල් කිරීමේ අවශ්‍යතාවය ඔබට දැනේ නම් එය හොඳයි. එස්ටීඑල් (හෝ ඒ සඳහා තල්ලුව) නරක යැයි මවාපාමින් නොසිටින්න. මම වාණිජ අයිෆෝන්, නින්ටෙන්ඩෝ ඩීඑස්, වයි, පීසී, මැක් සහ එක්ස්බොක්ස් ක්‍රීඩා සඳහා STL පුළුල් ලෙස භාවිතා කර ඇත්තෙමි. වෙනත් කෙනෙකුගේ "වඩා හොඳ" පුස්තකාලයක් භාවිතා කිරීමට මට බල කරන සෑම අවස්ථාවකම, එය අඩුපාඩු සහ දෝෂ සහිත බව මට පෙනී ගියේය.
බ්‍රැෆල්

5
මා භාවිතා කළ වෙනත් ඕනෑම වේදිකාවක මෙන් එය ඩීඑස් මත ද ක්‍රියා කරයි. මම UI සහ AI කේතය පුරා STL භාවිතා කළෙමි. ක්‍රීඩාව ds.ign.com/articles/832/832147p1.html විය . මම වැඩ කරමින් සිටියේ 9 වන පදනමේ කොටසක් වූ Amaze හි කොටසක් වූ කුඩා චිත්‍රාගාරයක ය.
BRaffle

7
මයික් යනු දත්ත සම්බන්ධයෙනි. දත්ත දෙස බැලීමෙන් දත්ත පරිවර්තනය කිරීම සඳහා හොඳම ක්‍රමය යෝජනා කරයි. එය මහා පරිමාණයෙන් යොදන්න, ඔබට වැඩසටහන් තිබේ. මෙම සන්දර්භය තුළ ඔහුගේ විවේචනය බොහෝ අර්ථවත් කරයි. එස්.ටී.එල්. මම මයික් වෙනුවෙන් කතා කිරීමට අදහස් නොකෙළෙමි, නමුත් මෙම ගැටලුවට එළඹීමේ මාර්ගය පසුපසට යන බව ඔහු යෝජනා කරනු ඇතැයි මම විශ්වාස කරමි.
ඩෑන් ඕල්සන්

19

STL හි දැනටමත් පවතින දෙයක් නැවත ලිවීම ඔබ සොයා ගන්නේ නම්, කිසියම් හේතුවක් නිසා නවත්වන්න . STL භාවිතා කරන්න.

STL වසර ගණනාවක විශ්ලේෂණයන් හා කාලය තුළ ප්‍රශස්තිකරණය කර ඇති අතර එය වඩාත් කාර්යක්ෂම දෙයක් ලිවීමට ඔබ නොයන ආරක්ෂිත ඔට්ටුවකි. සරල විසඳුමක් ලබා ගත හැකි තැනක ඔබ STL භාවිතා කළ යුතු යැයි නොකියයි (එනම්, ඔබ දන්නා දේවල් ප්‍රමාණයක් ඇති විට අරාව භාවිතා කරන්න, stl :: ලැයිස්තුවක් නොවේ), නමුත් ඔබ සිතියමක් ක්‍රියාත්මක කිරීම ලියන්නේ නම් ( මූලික දත්ත ව්‍යුහය මිස ක්‍රීඩා ලෝක සිතියමක් නොවේ), ඔබ එය වැරදියි.


7
සිතියම <> කිසි විටෙකත් ක්‍රීඩාවේ සන්දර්භය තුළ කාර්යක්ෂම හෝ CPU කාර්යක්ෂම කිසිවක් සඳහා භාවිතා කිරීමට ඔබට අවශ්‍ය නොවේ. hash_map <> සෑම විටම පාහේ වඩා හොඳ තේරීමක් වේ, නමුත් hash_map හි ක්‍රියාකාරිත්වය වෙළෙන්දා සමඟ බෙහෙවින් වෙනස් වේ. ඔබ කොන්සෝලයක් සඳහා වන ක්‍රීඩාවක් ගොඩනඟන්නේ නම් හෝ පරිමාණ කළ හැකි ජාල ක්‍රීඩා STL ඔබේ අරමුණු සඳහා ඉතා මන්දගාමී හෝ පුපුරා යා හැක.
බෙන් සීග්ලර්

3
unordered_map <> දැන් පුළුල් ලෙස ලබා ගත හැකි අතර වර්තමාන TR1 කෙටුම්පතෙහි අතිශය දැඩි කාර්ය සාධන අවශ්‍යතා ඇත. (Overspecification වන තරමට, මම හිතන්නේ - එය පවා විවෘත hashing තහනම්, සහ සාමාන්යයෙන් මන්දගාමී වේ ඇති අතර, මම එය අමූලික සම්මත විසින් තහනම් කළ යුතු හිතන්නේ නැහැ.)

5
STL ඇල්ගොරිතම මෙන්ම බහාලුම් ද ඉදිරිපත් කරයි. ඇල්ගොරිතමයක stl අනුවාදය භාවිතා නොකිරීමට කිසි විටෙකත් හේතුවක් නැත. නිදසුනක් වශයෙන්, std::sortසාමාන්‍යයෙන් යටින් අභ්‍යන්තරය භාවිතා කරයි, වේගවත් හා සංකීර්ණ වන අතර එය ඔබටම කිරීමට අවශ්‍ය නොවනු ඇත.
deft_code

සත්‍යය unordered_mapC ++ 11 හෝ තල්ලුව යන දෙකම ඉතා මන්දගාමී වේ, ඔබට අවශ්‍ය වන්නේ google :: sparse_map හෝ ඔබේම වැනි විවෘත ලිපින හැෂ් සිතියමකි.
v.oddou

16

STL ක්‍රීඩා සඳහා හොඳ සුදුසුකමක්ද? අනිවාර්යයෙන්ම. ක්‍රීඩා යනු සංකීර්ණ මෘදුකාංගයකි, එස්ටීඑල් විසින් සංකීර්ණත්වය කළමනාකරණය කිරීමට උපකාරී වන විශේෂාංග සපයයි, එබැවින් එය හොඳයි.

එය ඔබගේ වේදිකාවට හොඳ සුදුසුකමක්ද? අවශ්‍ය නොවේ. ඔබ කොන්සෝලය සඳහා ලියන්නේ නම් මතකය සහ හැඹිලි භාවිතය පිළිබඳව ඔබ ඉතා සැලකිලිමත් විය යුතුය. STL මෙය ඉතා පහසු නොකරයි.

"කාවැද්දූ හෝ බෙස්පෝක් දෘඩාංග මත ධාවනය වන ඉහළ කාර්ය සාධනයක් සහිත තථ්‍ය කාලීන ක්‍රීඩා" සඳහා බොහෝ විට අපි "ක්‍රීඩා" වැරදියට සිතමි, නමුත් වෙනසක් කිරීම වැදගත්ය. ඔබ නියත 60fps වේගයෙන් පූර්ණ තිරයේ ධාවනය කිරීමට උත්සාහ නොකරන වින්ඩෝස් ක්‍රීඩාවක් ලියන්නේ නම් සම්මත පුස්තකාලය ඔබට ලබා දෙන මෙවලම් වළක්වා ගැනීමට හේතුවක් නැත.


10

මෙය සාදයට ඉතා ප්‍රමාද බව මම දනිමි, නමුත් කාලය වෙනස් කිරීම සහ පිළිතුරු රැඳී තිබේ. සී ++ 11 හි විශාල වෙනස්කම් ඇති අතර ඒවායින් බොහොමයක් සී ++ සහ සම්මත පුස්තකාලයේ ක්‍රියාකාරිත්වය වැඩි කරයි. එස්.ටී.එල්. හෝ බූස්ට් භාවිතා නොකරන අය නව ප්‍රමිතීන්ට අනුකූල නොවීමට පෙළඹෙන බව පෙනේ. ගෙදර දොරේ විසඳුම් වැදගත් වැඩිදියුණු කිරීම් වලින් තොර වේ. ඇත්ත වශයෙන්ම මෙය සැමවිටම එසේ නොවේ.

90 දශකයේ මැද භාගයේ සිට අද දක්වා සෑම ව්‍යාපෘතියක් සඳහාම මම STL භාවිතා කර ඇත. මම හිතන්නේ එස්ටීඑල් විරෝධී පාර්ශවයට එය භාවිතා නොකිරීමට සුළු වශයෙන් තාර්කික හේතු තිබේ. ඒවා බොහෝ දුරට නැති වී ගොස් ඇත. අභිරුචි විබෙදන්නන් එක් විසඳුමක් වන අතර, සංචිතය භාවිතා කිරීම තවත් එකකි. වටිනාකමින් දේවල් සම්මත නොකිරීම තුනෙන් එකකි, නමුත් මේවා ඉතා සරල වන අතර ඕනෑම ක්‍රමලේඛකයෙකු මේවා දැන සිටිය යුතුය. වඩා වැදගත් වන්නේ ඇල්ගොරිතම භාවිතා කිරීමයි. For_each () කරන්නේ කුමක්ද යන්න සම්පාදක ලේඛකයින් හරියටම දන්නා අතර කේතය ප්‍රශස්ත කළ හැකිය. ගෙදර රෝල් කළ ලූපයකින් එය සිදුවිය නොහැක. for_each () සංයුක්ත වස්තුවක ඊටත් වඩා හොඳය. මයික්‍රොසොෆ්ට් විසින් අනුක්‍රමිකකරණය ඇතුළු බොහෝ ආකාරවලින් for_each ප්‍රශස්තිකරණය කරයි. සමාන්තර_ෆෝර්_එච් () සහිත AMP පුස්තකාලය ද ඔවුන් සතුව ඇත. ඔබට අවස්ථාවක් ලැබුනේ නම්, මේ පිළිබඳව සම්පාදක ඉංජිනේරුවන් සමඟ කතා කරන්න. කොන්සෝල සම්පාදකයින් භාවිතා කරන දේ ප්‍රශස්තිකරණය කිරීමට යන්නේ, එබැවින් එය ' කුකුල් මස් හා බිත්තර ප්‍රශ්නයක්. මයික්‍රොසොෆ්ට් සී ++ 11 සමඟ ඉතා බරින් යුක්ත වන අතර ඊළඟ එක්ස්බොක්ස් ද වෙනස් නොවේ. මට PS4 ගැන කිසිම අදහසක් නැහැ, අපි තවම එකක් ලබාගෙන නැහැ.

අභිරුචි විබෙදන්නන් යනු මතක ගැටළුව හැසිරවිය හැකි එක් ක්‍රමයකි, නමුත් තවත් (බොහෝ විට නොසලකා හරින ලද) විකල්පයක් වන්නේ පන්ති පදනම් කරගත් නව සහ මකාදැමීමයි. විශාල කාර්ය සාධනය වැඩි කිරීම මේ ආකාරයෙන් කළ හැකිය.

බූස්ට් සහ එස්.ටී.එල්. ගැටළු විසඳීම පිළිබඳ පටු දැක්මක් ඇති බවට ඇති මතය පිරිසිදු උමතුවකි. ගති ලක්ෂණ සහ ප්‍රතිපත්ති තුළින් එස්ටීඑල් සහ බූස්ට් හි ඇති දේවල් අභිරුචිකරණය කළ හැකි දේ ගැන මම මවිත වෙමි. නිදසුනක් ලෙස සිද්ධි ස්වාධීන නූල් සංසන්දනය සඳහා බලන්න.

දිගු සම්බන්ධක වේලාවන් සහ කේත පිපිරීම් සම්බන්ධයෙන්, නව බාහිර අච්චුව මේ සඳහා උපකාරී වේ. සාමාන්‍යයෙන් මට පෙනී යන්නේ දිගු සම්පාදනය කිරීමේ වේලාවන් පැමිණෙන්නේ අතිරික්ත සම්බන්ධතාවයෙන් සහ pch අනිසි ලෙස භාවිතා කිරීමෙන් බවයි.

හෝම්ස්පන් වලට වඩා STL භාවිතා කිරීමට වඩාත්ම බලවත් හේතුව වන්නේ ඔබට STL සමඟ උදව් කළ හැකි මිලියන සංඛ්‍යාත ජනතාවක් සිටීමයි. සෑම විටම මෙන්, නොමේරූ ලෙස ප්රශස්තිකරණය නොකර පරීක්ෂා කරන්න, පරීක්ෂා කරන්න, පරීක්ෂා කරන්න.


රසවත් අදහස්; " පන්ති පදනම් කරගත් නව සහ මකන්න " යන්නෙන් ඔබ අදහස් කරන්නේ කුමක්ද? ඔබ අදහස් කළේ, දැනටමත් ගොඩවල ඇති වස්තූන් භාවිතා කරමින් ක්‍රියාවලියක් වේගවත් කරනවාද?
ජෝන්බේකර්ස්

9

මෙය ක්‍රීඩාවේ සංවර්ධනයේ උණුසුම් මාතෘකාවකි. ඉහත සඳහන් කළ පරිදි EASTL හැරෙන්නට මම පෞද්ගලිකව එය නිර්දේශ නොකරමි. ක්‍රීඩා වලදී මට STL සමඟ ප්‍රධාන ගැටලු දෙකක් තිබේ (තාක්‍ෂණිකව "C ++ සම්මත පුස්තකාලය", STL තවදුරටත් නම නොවේ). 1) STL භාවිතා කරන විට ගතික මතක වෙන් කිරීම බොහෝ විට ක්‍රීඩා වල ධාවන කාලය නාස්ති කරයි. 2) එස්ටීඑල් භාවිතය ක්‍රීඩා ගෘහ නිර්මාණ ශිල්පය සඳහා අර්‍ග-ව්‍යුහාත්මක ප්‍රවේශයක් දිරිගන්වන අතර ව්‍යුහාත්මක-අරා ප්‍රවේශයක් හැඹිලි හිතකාමී වේ.


වෙනත් තැනක සඳහන් කළ පරිදි, ඔබට බහාලුම් පංති සඳහා අභිරුචි විබෙදන්නන් ලබා දිය හැකිය - මේවා ඔබට අවශ්‍ය නම් නිදහස් ලැයිස්තු භාවිතා කළ හැකිය (පූර්ව වෙන් කළ අරා). අරා-ඔෆ්-ස්ට්‍රැක්ට්ස් එදිරිව ස්ට්‍රක්ට්-ඔෆ්-අරාස් ඔබ කිරීමට උත්සාහ කරන දේ මත බෙහෙවින් රඳා පවතී - වඩා හොඳ කුමන එකක්ද යන්න පිළිබඳව දැඩි හා වේගවත් රීතියක් නොමැත.
ස්කීස්

ඔබ විසඳන ගැටලුව හොඳින් වටහා ගැනීම වැදගත් බව ඔබගේ අදහස මම අගය කරමි. නමුත් ගෞරවයෙන්, මම තවමත් ඔබගේ නිගමනයට එකඟ නොවෙමි. සෑම ගැටළුවකටම අභිරුචි එස්ටීඑල් විබෙදන්නන්ට ප්‍රකාශ කළ නොහැකි භාවිත රටාවන් ඇත, නමුත් පැතලි අරා සමඟ ක්‍රියාත්මක කරන ලද ස්ථාවර-බ්ලොක් විබෙදන්නා වැනි අභිරුචි බහාලුමක් තුළ පහසුවෙන් උත්තේජනය කළ හැකිය. සමජාතීය වර්ග රාශියක් මත ස්ථාවර පරිවර්තනයක් යෙදීමෙන් බහුඅවයවික දෛශිකයක් හරහා නැවත යෙදීම හා අථත්‍ය ක්‍රම භාවිතා කිරීමට වඩා හොඳ හැඹිලි සහසම්බන්ධයක් ඇති වේ.
ටෙරන්ස් කොහෙන්

5

එය රඳා පවතියි. ව්‍යාපෘතිය කොතරම් විශාලද, කුමන වේදිකාවක්ද, සහ කාල නියමය කුමක්ද?

ඔබ විශාල ව්‍යාපෘතියක, සීමිත සම්පත් සහිත වේදිකාවල, සැලකිය යුතු කාලරාමුවක් සහ අයවැයක් සමඟ වැඩ කරන්නේ නම්, ඔබට මිලියන භාගයක රේඛා කේත පදනමක් දෙස බලන නොවැළැක්විය හැකි නිරය වළක්වා ගැනීමෙන් ඔබට බොහෝ කරදර ඉතිරි කර ගත හැකිය. එස්ටීඑල් සමඟ පැටලී ඇති අතර, රාමු 30 ට වඩා තබා ගත නොහැක, තවත් වත්කම් කිහිපයකට සරිලන තරම් RAM ප්‍රමාණයක් අනුභව කරයි, සහ ගොඩනැගීමට පැය 2 ක් ගතවේ.

කෙසේ වෙතත්, වෙනත් අවස්ථාවන්හිදී, නිසි පරිදි යොදන විට STL සහ Boost පවා ඉතා ප්‍රයෝජනවත් වේ. මම STL / Boost තෝරාගැනීමක් භාවිතා කළ මාතෘකා මත වැඩ කර ඇති අතර, ඒ සඳහා කේත කිරීම නිරපේක්ෂ සිහිනයක් විය: අඩු දෝෂ / කාන්දුවීම් සහ කේත නඩත්තු කිරීම පහසුය යන්නෙන් අදහස් කරන්නේ විනෝදජනක නව විශේෂාංග කේතනය කිරීමට වැඩි කාලයක්! විශේෂයෙන් විනෝදාංශ ව්‍යාපෘති සඳහා, එය අභිප්‍රේරණ දෙපාර්තමේන්තුවේ විශාල ජයග්‍රහණයක්.

පහසුව සඳහා කාර්ය සාධනය වෙළඳාම් කරන්නේ කවදාදැයි දැන ගන්න!


1
"පහසුව සඳහා කාර්ය සාධනය වෙළඳාම් කරන්නේ කවදාදැයි දැන ගන්න". ඔව්. මෙම වාක්‍යය ඕනෑම පිළිතුරකට තරම් හොඳ පිළිතුරකි. ඔබගේ ක්‍රීඩාව සමඟ ඔබට අත් කරගත යුතු දේ හදුනා ගන්න, සම වයසේ මිතුරන්ගෙන් විමසන්න සහ එස්ටීඑල් ඔබට එහි යාමට හෝ ඔබට බාධාවක් වේදැයි තීරණය කරන්න. ඔබගේ ක්‍රීඩාව සමඟ ඊළඟ ජෙනරල් ග්‍රැෆික්ස් සහ කාර්ය සාධනය සඳහා තීරුව සැකසීමට ඔබ බලාපොරොත්තු නොවන්නේ නම්, STL ඔබට උදව් කරනු ඇතැයි මම කියමි.
gkimsey

4

IMHO STL දැනටමත් හොඳින් ක්‍රියාත්මක වන නිසාත් එය සෑදී ඇති කාර්යයන් සඳහා ප්‍රශස්තිකරණය කර ඇති නිසාත් එය හොඳ සුදුසුකමක් යැයි මම කියමි. ඊට අමතරව, ඔබ ක්‍රීඩාවක නියැලී සිටින නිසා, ඔබේ ජීවිතය පහසු කරවන සහ ඔබේ කේතය දෝෂ වලට ගොදුරු වීමේ හැකියාව අඩු කර ඇති මෙවලම් භාවිතා කරන්න.

ඔබට ක්‍රීඩාවේ AI, පරිශීලක අත්දැකීම් හෝ ඊට වඩා හොඳ දෙයක් මත වැඩ කළ හැකි විට රෝදය ප්‍රතිනිර්මාණය කිරීමට කරදර වන්නේ ඇයි; පරීක්ෂා කිරීම සහ නිදොස් කිරීම?


2
ප්‍රායෝගිකව, ව්‍යාපෘතියක අවසානය දක්වා කාර්ය සාධනය තීරණාත්මක ගැටළුවක් වේ. ඔබ STL භාවිතා කරන්නේ නම්, ඔබට ප්‍රශස්තිකරණය සඳහා ඇති අවස්ථාව ඉතා අල්පය, මන්ද එය ඔබගේ විශේෂිත යෙදුම් ගෙන ඒවා සාමාන්‍ය ආකාරයකින් විසඳන බැවිනි. නිශ්චිත අවස්ථා නිශ්චිත ආකාරයකින් විසඳීම (සහ ගතික මතක වෙන් කිරීමකින් තොරව) සෑම විටම පාහේ ඉහළ කාර්ය සාධනයකි.
ටෙරන්ස් කොහෙන්

2
නමුත් ඔබට ගතික මතක වෙන් කිරීම අවශ්‍ය නොවේ නම්, ඔබ STL භාවිතා නොකළ යුතුය. එය කාරණයකි. ඔබේම කේතය වඩා හොඳ නොවනු ඇත, නිසැකවම එය වඩාත් නරක විය හැකිය. මෙම නිර්මාණ තීරණය ලෙස සියලුම STL ගෙඩිය ද මෙහි STL, එහි හැකියාවන්, හෝ එහි perf ලක්ෂණ නොවේ ප්රශ්නය, වේ. ඔබ ගැටලුවේ වැරදි කොටසට පහර දෙනවා.
එඩ් රොපල්

4

ඔබ එය හොඳින් වටහාගෙන සිටින තාක් කල් ක්‍රීඩා සඳහා STL ඉතා සුදුසුය. අපගේ එන්ජිම එය ඉතා පුළුල් ලෙස භාවිතා කරන අතර එය කිසි විටෙකත් ගැටලුවක් වී නොමැත. මට සම්පූර්ණයෙන්ම වෙනස් කතාවක් විය හැකි කොන්සෝල සංවර්ධනය පිළිබඳ අත්දැකීම් නොමැත, නමුත් එය සියලුම පළාත් සභා වේදිකාවල (වින්ඩෝස් / මැක් / ලිනක්ස්) හොඳින් සහාය වේ.

වැදගත්ම දෙය නම් එක් එක් බහාලුම් වර්ගයේ ශක්තීන් සහ දුර්වලතා මොනවාදැයි වටහා ගැනීම සහ ඔබ කරමින් සිටින කාර්යය සඳහා නිවැරදි බහාලුම තෝරා ගැනීමයි.


4

මගේ හිටපු සේවායෝජකයා ශක්තිමත් අභිරුචි බහාලුම් පන්ති කට්ටලයක් භාවිතා කිරීමෙන් STL වෙත මාරු විය. ගොඩනැඟීමේ වේලාවන් ඉහළ ගොස් නිදොස් කිරීමේ පහසුව අඩු විය. අප මුල සිටම ආරම්භ කළේ නම්, එස්ටීඑල් (සමහර විට වඩා හොඳින් භාවිතා කර ඇත) අර්ථවත් වනු ඇත, නමුත් වැඩ කරන, වේගවත්, නිදොස් කළ හැකි කේතයක් ඉවත දැමීම යුක්ති සහගත කරන එස්.ටී.එල් වෙත මාරුවීමෙන් අප කිසිවක් ලබා ගත් බව මට කිසි විටෙකත් පැහැදිලි නොවීය.

මගේ පුද්ගලික ව්‍යාපෘති සඳහා, STL ගැලපෙන්නේද නැද්ද යන්න ව්‍යාපෘතිය මත රඳා පවතී. මම මයික් ඇක්ටන් විලාසිතාවේ දත්ත මත පදනම් වූ, මතක-සහ-හැඹිලි-ප්‍රවේශ ප්‍රශස්තිකරණ වැඩක් කිරීමට උත්සාහ කරන්නේ නම්, මම අවම වශයෙන් මගේ අභිරුචි දත්ත ව්‍යුහයන් පෙරළීම ගැන සිතමි. මම සමහර ඇල්ගොරිතම හෝ ක්‍රීඩාවන් මූලාකෘතිකරණය කර කාර්ය සාධනය, පරිමාණය, ඉලක්ක වේදිකාව ආදිය ගැන තැකීමක් නොකරන්නේ නම් මම ස්වයංක්‍රීයව STL අල්ලා ගනිමි.


4

මේ සඳහා මගේ ශත 2 වන්නේ එස්.ටී.එල්. මම ත්‍රිමාණ ක්‍රීඩා එන්ජිමක් (AAA ගුණාත්මක භාවය නොව, දියුණු - තිර රචිත ආයතන වර්ග, විලම්බිත විදැහුම්කරු, ඒකාබද්ධ බුලට් භෞතික විද්‍යාව) PC සඳහා සංවර්ධනය කර ඇති අතර බහාලුම් ප්‍රධාන බාධකයක් බවට පත්ව ඇති බව මා තවම දැක නැත. වැරදි ත්‍රිමාණ ඒපීඅයි භාවිතය සහ දුර්වල ඇල්ගොරිතම හොඳම ඉලක්ක වේ (පැතිකඩ මගින් තීරණය වේ!) මම ඇතුළු වූ සෑම අවස්ථාවකම මඳක් වැඩි කාර්ය සාධනයක් ලබා ගැනීමට උත්සාහ කළෙමි.


3

මම STL භාවිතා කරමින් ක්‍රීඩා ගොඩනගා ඇති අතර මම එයට කැමතියි, එය හොඳින් ක්‍රියාත්මක වන බව පෙනේ.


3

හොඳ ප්රශ්නයක්! වඩාත් නිශ්චිත ප්‍රශ්නයක් නම් STL සහ Boost සමඟ සපුරා ගත නොහැකි ක්‍රීඩාවකට තිබිය යුතු පොදු අවශ්‍යතා මොනවාද යන්නයි.

මගේ අත්දැකීම් අනුව, කොන්සෝල දෘඩාංගවල තද මතක සීමාවන් නිසා ඔබේ අභිරුචි විබෙදුම්කරු කොතරම් දක්ෂ වුවත්, ඕනෑම ආකාරයක ගතික ප්‍රමාණයේ බහාලුමක් නරක අදහසක් බවට පත් කරයි. හිතාමතාම සීමාවන් නොමැති බහාලුම් ක්‍රමලේඛකයන්ට ඔවුන්ගේ දත්ත කට්ටලවල සීමාවන්ට සීමා නොවන කේත ලිවීමට උනන්දු කරයි. ලුහුබැඳීමට අපහසු අසංඛ්‍යාත විචල්‍යයන් මත පදනම්ව ඔබේ මතක සීමාවන් ඉක්මවා යා හැක. මෙය නවීන ක්‍රීඩා වල අස්ථාවරත්වයට මූලික හේතුවක් බව මට හැඟේ.

මීට අමතරව, සැකිලි ඕනෑවට වඩා භාවිතා කිරීම විශාල කේත පදනමක් තුළ ඉතා දිගු කාලයක් සම්පාදනය කිරීමට හේතු විය හැකි අතර, ඔබේ ක්‍රියාත්මක කළ හැකි ප්‍රමාණය විශාල වන අතර එමඟින් එය PS3 හි සහායක හරයක් හැඹිලිය තුළට නොගැලපේ.

කෙසේ වෙතත්, පළාත් සභා පමණක් සංවර්ධනය සඳහා මම සිතන්නේ STL සහ Boost ඉතා හොඳයි. සාමාන්‍ය විසඳුම් සෑම විටම පරමාදර්ශී නොවන නමුත් ඒවා බොහෝ විට ප්‍රමාණවත් වේ. ගැටලුවකට ඔබේ පළමු විසඳුම කිසි විටෙකත් පරමාදර්ශී නොවන අතර, එය ප්‍රමාණවත් වන තෙක් ඔබ අඩුපාඩු වැඩි දියුණු කර හෝ ප්‍රතිස්ථාපනය කරයි.


2

STL ඔබේ ක්‍රීඩාවට හොඳ සුදුසුකමක් නම් STL ඔබේ ක්‍රීඩාවට හොඳ සුදුසුකමක් වේ.

සංවර්ධනයේදී සිදු කරන ලද සියලුම තාක්‍ෂණික තේරීම් මෙන්ම, ඔබ එහි වාසි සහ අවාසි කිරා මැන බැලිය යුතුය - මගේම පුස්තකාලයක් පෙරළීම මට STL භාවිතා කරනවාට වඩා ප්‍රයෝජනවත් මතක භාවිතය, ක්‍රියාකාරිත්වය සහ tivity ලදායිතාව ලබා දෙයිද? විය හැකිය; vectorවැඩි මතකයක් භාවිතා කරන, මන්දගාමී වන, සහ දැනටමත් පවතින දේ හා සසඳන විට ක්‍රියාකාරීව සිටීමට විශාල නඩත්තු ප්‍රමාණයක් අවශ්‍ය වන නමුත් එය ක්‍රියාත්මක කිරීම පහසුය .

අනෙක් අය ක්‍රීඩා වලදී STL භාවිතා කිරීමෙන් වැළකී සිටින නිසා මිනිසුන් ඔවුන්ගේ ක්‍රීඩා වලදී STL භාවිතා කිරීමෙන් වැළකී සිටිය යුතුය; ඔවුන් සියළුම විකල්පයන් කිරා මැන බැලුවහොත් ඔවුන් එය භාවිතා කිරීමෙන් වැළකී සිටිය යුතු අතර තවත් ක්‍රියාත්මක කිරීමක් ඔවුන්ගේ නිෂ්පාදනයේ ගුණාත්මකභාවය වැඩි දියුණු කරනු ඇතැයි ඔවුන් අවංකවම විශ්වාස කරති .


2
ඔබගේ අදහස් දැක්වීමේ අවසාන කොටස සමඟ මම 100% ක් එකඟ වෙමි, නමුත් මම ඊටත් වඩා ඉදිරියට යන්නෙමි: STL හොඳ විකල්පයක් නොවන්නේ මන්දැයි ඔබට නිශ්චිතව නිරූපණය කළ හැකි නම් , STL භාවිතා නොකරන්න. නැතිනම් කරන්න. භාණ්ඩ ප්‍රවාහනය ("ඔහ්, ක්‍රීඩා සංවර්ධකයින් C ++!" සිට "ඔහ්, ක්‍රීඩා සංවර්ධකයින් STL භාවිතා නොකරයි!" දක්වා සියල්ල සෞඛ්‍ය සම්පන්න නොවේ. කෙසේ වෙතත්, මම ඔබේ දෙවන ඡේදය සමඟ සුළු ප්‍රශ්නයක් සලකා බලමි: එස්ටීඑල් නැවත ප්‍රතිස්ථාපනය කිරීම හොඳ අදහසක් යැයි සිතීමට තවමත් බොළඳ පුද්ගලයන් vectorSTL පිරිසට වඩා හොඳ වනු ඇතැයි සිතිය නොහැක. ඔබට එය කළ හැකි කාලය වන විට, ඔබට අවශ්‍ය යැයි ඔබ තවදුරටත් සිතන්නේ නැත! :-)
එඩ් රොපල්

2

බොහෝ ප්‍රශ්න මෙන් පිළිතුර කිසි විටෙකත් “ඔව් හෝ නැත”, කළු හෝ සුදු නොවේ. එස්ටීඑල් සමහර ගැටළු සඳහා හොඳ සුදුසුකමක් වන අතර, එම ගැටළු සඳහා එය භාවිතා කිරීම හොඳින් විය යුතුය. එය නිෂ් less ල යැයි උපකල්පනය කිරීම වැරැද්දකි, නමුත් සෑම තත්වයකදීම භාවිතා කිරීම සුදුසු යැයි උපකල්පනය කිරීම ද වැරැද්දකි.

ක්‍රීඩා සංවර්ධනයේදී STL භාවිතා කරන විට අවධානයෙන් සිටිය යුතු ලොකුම ප්‍රශ්නය වන්නේ මතක වෙන් කිරීම ය. එස්ටීඑල් හි පෙරනිමි විබෙදන්නන් ක්‍රීඩාවේ සංවර්ධනය සඳහා කැමති ප්‍රතිපාදන ක්‍රමෝපායන්ට හොඳින් ගැලපෙන බවක් නොපෙනේ. ඇත්ත වශයෙන්ම අභිරුචි විබෙදන්නන් භාවිතා කළ හැකිය, නමුත් මෙය STL නොවන කේත කේතයකට STL එක් කළ යුතුද යන්න සලකා බලන්නේ නම් සමස්ත අදහසම සිත් ඇදගන්නා සුළු කරයි.

ඔබේ කේත පදනම STL නොවන නම්, අභිරුචි විබෙදන්නන් නිවැරදිව ක්‍රියාත්මක කිරීම සඳහා ඔබට STL හෝ අච්චු සංකල්ප පිළිබඳව හුරුපුරුදු කිසිවෙකු නොසිටිනු ඇත.


2

මෙම සාකච්ඡාව පහත පරිදි සාරාංශගත කළ හැකි යැයි මම සිතමි.

මධ්‍යස්ථව ලිඛිත යෙදුම්-විශේෂිත කේතය <හොඳින් ලියා ඇති පොදු අරමුණු කේතය <හොඳින් ලියා ඇති යෙදුම්-විශේෂිත කේතය

ගෙදර හැදූ විසඳුම 3 වන කාණ්ඩයට අයත් වන ඕනෑම අයෙක් ඔවුන්ගේ විශේෂිත ගැටලුවට මුල් ප්‍රශ්නයට පිළිතුර නිසැකවම දනී. එස්.ටී.එල්. 2 වන කාණ්ඩයට අයත් වේ. එබැවින් " මම එස්ටීඑල් භාවිතා කළ යුතුද" යන ප්‍රශ්නය ඇසීමට අවශ්‍ය අයෙකුට , පිළිතුර බොහෝ විට ඔව් ය.


2

එස්.ටී.එල්. පරිගණකයක භාවිතා කිරීම සඳහා සියල්ලම සුදුසුය, මන්ද එහි උසස් අතථ්‍ය මතක පද්ධතිය මඟින් පරිස්සමින් මතක වෙන් කිරීමක අවශ්‍යතාවය මඳක් අඩු තීරණාත්මක වේ (යමෙක් තවමත් ඉතා ප්‍රවේශම් විය යුතුය). සීමිත හෝ අථත්ය මතක පහසුකම් සහ අධික ලෙස හැඹිලි මිස් පිරිවැය සහිත කොන්සෝලයක, අනාවැකි කිව හැකි සහ / හෝ සීමිත මතක විබෙදුම් පැට් erns ඇති අභිරුචි දත්ත ව්යුහයන් ලිවීමට ඔබ බොහෝ විට ඉඩ ඇත. (පළාත් සභා ක්‍රීඩා ව්‍යාපෘතියකද ඔබ එසේ කිරීම වැරදිය.)


1

මම හිතන්නේ මෙම ප්‍රශ්නය සැබවින්ම විශාල නොවූ ප්‍රශ්නයක් - මගේ Y හි X භාවිතා කළ යුතුද ? එයට සැබවින්ම පිළිතුරු දිය හැකි එකම ක්‍රමය එය ඔබම උත්සාහ කිරීමයි. X විශිෂ්ට ලෙස ක්‍රියා කරන බව ඔබ සොයා ගන්නා සෑම පුද්ගලයෙකුටම, එය භයානක යැයි පවසන අයෙකු ඔබ සොයා ගනු ඇත. ඒ දෙකම හරි - ඔවුන්ගේ ව්යාපෘතිය සඳහා.

මෘදුකාංගයේ ඇති විශිෂ්ටතම දෙය නම්, වෙනත් බොහෝ විෂයයන් මෙන් නොව, ඔබ කැමති ආකාරයට එය ක්‍රියාත්මක නොවන බව ඔබට පෙනී ගියහොත් ඔබට පසුව සෑම විටම වෙනස් කළ හැකිය. මෙම ව්‍යාපෘතියේදී STL ඔබ වෙනුවෙන් වැඩ නොකරන බව ඔබ පසුව දැනගනීද? එය ඉවතට, වෙනත් දෙයක් එහි ස්ථානයේ තබන්න. ඔබ ඔබේ වස්තූන් අතර යුතුකම් බෙදූ ආකාරය කැමති නැද්ද? ප්‍රතික්‍රියාකාරකය. ඔබ වස්තූන් භාවිතා කළාට කැමති නැද්ද? සෘජු සී ක්‍රම මගින් ඒවා ප්‍රතිස්ථාපනය කරන්න. සෑම දෙයක්ම ව්‍යුහයන් හා ක්‍රමවේදයන් තුළ ගබඩා කර තැබීමට කැමති නැද්ද? C ++ වස්තු සමඟ ඒවා ප්රතිස්ථාපනය කරන්න.


1
ඔබ නිවැරදියි, නැවත ප්‍රතිනිර්මාණය කිරීම සඳහා විශාල ද penalty ුවමක් නියම කළ හැකිය; එබැවින් අත්තනෝමතික තීරණයක් වෙනුවට දැනුවත් තීරණයක් ගැනීම දිගු කාලීනව ඔබේ කාලය ඉතිරි කර දෙනු ඇත.
ඇලන්

1

මම කියන්නේ එස්.ටී.එල්. මගේ හේතුව තරමක් සරල ය:

  1. ඔබට ක්‍රීඩා ලිවීමට STL අවශ්‍ය නොවේ. විශාල ඒවා පවා නැත.
  2. STL ඔබේ සම්පාදක කාලය නාටකාකාර ලෙස වැඩි කරයි.
  3. විශාල සම්පාදනය කිරීමේ කාලය ඔබේ සංවර්ධනයට වඩා අඩු පුනරාවර්තන වලට තුඩු දෙයි.

මම පුනරාවර්තන ගණන ඉහළම වැදගත්කමක් දරමි, එබැවින් මම STL වෙතින් stay ත්ව සිටිමි.

මිල අධික පුනරාවර්තනයන් ඇත්ත වශයෙන්ම සිදුවන්නේ ඉතා සුළු ප්‍රමාණයකින් දේවල් කිරීමට උත්සාහ කරන විශාල සංවර්ධන කණ්ඩායම් වෙතය. මම එය දැක එය අසා ඇත්තෙමි, එක් වැරදිකරුවෙකු අච්චු පුස්තකාල සඳහා සම්පාදනය කරන වේලාවන් ලෙස පෙනේ.


1
සම්පාදනය කරන වේලාවන් ගැන මම එකඟ වෙමි. ඕනෑම සැලකිය යුතු සම්පාදක කාලයක් නැතිවූ වැඩ ප්‍රමාණය දෙගුණ කරයි; උදා: සම්පාදනය මිනිත්තු 5 ක් පවතින්නේ නම්, ඔබ කෝපි ලබා ගැනීමට විනාඩි 10 ක් වැය කරනු ඇත. ;)
ඉප්ස්කිගල්

මෙම තර්කයේ දෙපැත්තම මා දකින අතර, ඔබේ තර්කයට මම තදින්ම එකඟ වන බව පැවසිය යුතුය, රිචඩ්. +1.
ඉංජිනේරු
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.