<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                nitializer\_list是C++11提供的新類型,定義在頭文件中。 用于表示某種特定類型的值的數組,和vector一樣,initializer\_list也是一種模板類型。 ``` template< class T > class initializer_list; ``` ## 列表初始化 C++11擴大了初始化列表的適用范圍,使其可用于所有內置類型和用戶定義的類型。無論是初始化對象還是某些時候為對象賦新值,都可以使用這樣一組由花括號括起來的初始值了。使用初始化列表時,可添加=,也可不添加。 ``` //定義一個變量并初始化 int units_sold=0; int units_sold(0); int units_sold={0}; //列表初始化 int units_sold{0}; //列表初始化 ``` 當初始化列表用于內置類型的變量時,這種初始化形式有一個重要特點:如果我們使用列表初始化值存在丟失信息的風險,則編譯器將報錯: ~~~ long double ld=3.1415926536; int a={ld},b={ld}; //錯誤:轉換未執行,因為存在丟失信息的風險 int c(ld),d=ld; //正確:轉換執行,且確實丟失了部分值 ~~~ ## initializer\_list的使用 它提供的操作如下: ~~~ initializer_list<T> lst; //默認初始化;T類型元素的空列表 initializer_list<T> lst{a,b,c...}; //lst的元素數量和初始值一樣多;lst的元素是對應初始值的副本 lst2(lst) lst2=lst //拷貝或賦值一個initializer_list對象不會拷貝列表中的元素;拷貝后,原始列表和副本元素共享 lst.size() //列表中的元素數量 lst.begin() //返回指向lst中首元素的指針 lst.end() //返回指向lst中尾元素下一位置的指針 ~~~ 需要注意的是,initializer\_list對象中的元素永遠是常量值,我們無法改變initializer\_list對象中元素的值。并且,拷貝或賦值一個initializer\_list對象不會拷貝列表中的元素,其實只是引用而已,原始列表和副本共享元素。 和使用vector一樣,我們也可以使用迭代器訪問initializer\_list里的元素 ~~~ void error_msg(initializer_list<string> il) { for(auto beg=il.begin();beg!=il.end();++beg) cout<<*beg<<" "; cout<<endl; } ~~~ 如果想向initializer\_list形參中傳遞一個值的序列,則必須把序列放在一對花括號內: ~~~ //expected和actual是string對象 if(expected != actual) error_msg({"functionX",expectde,actual}); else error_msg({"functionX","okay"}); ~~~ 說了這么多,那initializer\_list到底有什么應用呢? 有了initializer\_list之后,對于STL的container的初始化就方便多了,比如以前初始化一個vector需要這樣: ~~~ std::vector v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); ~~~ 而現在c++11添加了initializer\_list后,我們可以這樣初始化 ~~~ std::vector v = { 1, 2, 3, 4 }; ~~~ 并且,C++11允許構造函數和其他函數把初始化列表當做參數。 ~~~ #include <iostream> #include <vector> class MyNumber { public: MyNumber(const std::initializer_list<int> &v) { for (auto itm : v) { mVec.push_back(itm); } } void print() { for (auto itm : mVec) { std::cout << itm << " "; } } private: std::vector<int> mVec; }; int main() { MyNumber m = { 1, 2, 3, 4 }; m.print(); // 1 2 3 4 return 0; } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看