(नोट: यह प्रश्न तत्वों की संख्या को निर्दिष्ट नहीं करने और अभी भी नेस्टेड प्रकारों को सीधे आरंभीकृत करने की अनुमति देने
के बारे में है ।) इस प्रश्न में सी सरणी जैसे बचे हुए उपयोगों पर चर्चा की गई है int arr[20];
। पर उसके जवाब , @James Kanze शो सी सरणियों के अंतिम गढ़ों में से एक है, यह अद्वितीय प्रारंभ विशेषताओं है:
int arr[] = { 1, 3, 3, 7, 0, 4, 2, 0, 3, 1, 4, 1, 5, 9 };
हमें तत्वों की संख्या निर्दिष्ट करने की आवश्यकता नहीं है, हुर्रे! अब पुनरावृति सी ++ 11 कार्यों के साथ यह खत्म हो गया std::begin
और std::end
से <iterator>
( या अपने खुद के वेरिएंट ) और आप कभी नहीं भी इसके आकार के बारे में सोच की जरूरत है।
अब, क्या कोई (संभवतः टीएमपी) तरीके हैं जिनके साथ समान प्राप्त करने के लिए std::array
? मैक्रोज़ के उपयोग से इसे अच्छे दिखने की अनुमति मिलती है। :)
??? std_array = { "here", "be", "elements" };
संपादित करें : मध्यवर्ती संस्करण, विभिन्न उत्तरों से संकलित, इस तरह दिखता है:
#include <array>
#include <utility>
template<class T, class... Tail, class Elem = typename std::decay<T>::type>
std::array<Elem,1+sizeof...(Tail)> make_array(T&& head, Tail&&... values)
{
return { std::forward<T>(head), std::forward<Tail>(values)... };
}
// in code
auto std_array = make_array(1,2,3,4,5);
और सभी प्रकार के शांत C ++ 11 सामान को नियोजित करता है:
- वेरिएडिक टेम्पलेट
sizeof...
- संदर्भों को देखें
- एकदम सही अग्रेषण
std::array
, बेशक- यूनिफॉर्म इनिशियलाइज़ेशन
- यूनिफॉर्म इनिशियलाइज़ेशन के साथ रिटर्न प्रकार को छोड़ना
- प्रकार का अनुमान (
auto
)
और एक उदाहरण यहां पाया जा सकता है ।
हालाँकि , @ जोहान्स ने @ Xaade के उत्तर पर टिप्पणी में कहा है, आप ऐसे फ़ंक्शन के साथ नेस्टेड प्रकारों को प्रारंभ नहीं कर सकते। उदाहरण:
struct A{ int a; int b; };
// C syntax
A arr[] = { {1,2}, {3,4} };
// using std::array
??? std_array = { {1,2}, {3,4} };
इसके अलावा, आरंभिकों की संख्या कार्यान्वयन द्वारा समर्थित फ़ंक्शन और टेम्पलेट तर्कों की संख्या तक सीमित है।
TMP
आपके प्रश्न का अर्थ क्या है ?