C++11特性:列表初始化:VS2010中vector的初始化方式
在使用VS2010學習C++Primer第五版時,學習到了初始化的問題,算是一個小難點吧。
C++11的新特性支援列表初始化:將初始值放在花括號(注意不是圓括號)內進行列表初始化,而VS2012版本及以上才完全支援C++11的新特性,所以會出現這個小問題。
(PS:初始化與賦值不同,初始化的含義是建立變數時賦予其一個初始值,而賦值的含義是把物件的當前值擦去,用一個新值代替。)
#include <iostream> #include <string> #include <vector> using namespace std; void main() { vector<string> text{"ksaocdICsni"};//列表初始化 for (auto it = text.begin(); it != text.end() && it ->empty();it++) { cout<<*it<<endl; } }
如果如上直接在VS2010中使用列表初始化,那麼程式還出現以下錯誤:
編譯器是不會理解你的關於列表初始化的問題的。
那麼怎樣在VS2010中初始化vector<string> 呢?
如下三個方法:
1:類似於陣列的分別定義
vector<string> strArray(10); strArray[0] = "hello"; strArray[1] = "world"; strArray[2] = "this"; strArray[3] = "find"; strArray[4] = "gank"; strArray[5] = "pink"; strArray[6 ]= "that"; strArray[7] = "when"; strArray[8] = "how"; strArray[9] = "cpp";
2:使用push_back()函式,進行擴充套件初始化
vector<string> strArray; strArray.push_back("hello"); strArray.push_back("world"); strArray.push_back("this"); strArray.push_back("find"); strArray.push_back("gank"); strArray.push_back("pink"); strArray.push_back("that"); strArray.push_back("when"); strArray.push_back("how"); strArray.push_back("cpp");
3:使用建構函式的方式
string str[]={"hello","world","this","find","gank","pink","that","when","how","cpp"};
vector<string> strArray(str, str+10);
相關推薦
C++11特性:列表初始化:VS2010中vector的初始化方式
在使用VS2010學習C++Primer第五版時,學習到了初始化的問題,算是一個小難點吧。 C++11的新特性支援列表初始化:將初始值放在花括號(注意不是圓括號)內進行
C++ 11 特性:中的演算法
參考文獻:《C++ Primer》 一、algorithm介紹 algorithm譯為演算法,提供了大量基於迭代器的非成員模版函式。本文將盡可能全面的講解algorithm標頭檔案下的演算法以
C++11特性--統一的初始化,std::initializer_list
注:本系列筆記所有內容的參考資料來源於《C++ Primer Plus》 C++11特性需編譯器支援,如果是WindowS整合開發環境,一般需要在IDE的編譯器選項裡找或者工程的屬性裡可以配置"-std=c++11" 以devC++為例:proj
C++ 11 特性:關聯容器map、set的使用
參考文獻《C++ Primer》 一、關聯容器概述 1.1 關聯容器的概念 關聯容器支援高效的查詢與訪問,主要的關聯容器為map與set這兩個。其中map主要提供的是鍵-值的操作,比如
C++11特性:decltype關鍵字
decltype簡介 我們之前使用的typeid運算子來查詢一個變數的型別,這種型別查詢在執行時進行。RTTI機制為每一個型別產生一個type_info型別的資料,而typeid查詢返回的變數相應type_info資料,通過name成員函式返回型別的名稱。同時在C++1
C++11對map容器的訪問:下標訪問、at()、find、lower_bound&upper_bound、equal_range
C++中對map容器的訪問有好幾種方式,最簡單的就是直接通過下標訪問,但是這種模式有一個缺點就是如果被訪問元素不在map中,會插入此元素並初始化,下面詳細介紹幾種訪問方式: 1 下標訪問: map<int ,int> m; m[1]=111; m[2]=222
《深入理解C++11》筆記–右值引用:移動語義和完美轉發
上一篇:《深入理解C++11》筆記–建構函式 這篇文章介紹的了第三章中右值引用相關的內容。在介紹該內容之前,會對一些相關問題進行解釋,便於理解後面的內容。 並且,提前說明,許多編譯器會多拷貝構造和移動構造進行優化省略,這樣就看不到拷貝構造和移動構造的過程,需
C++ 11特性
erro 匹配 編譯速度 void con 函數對象 roc _each 文件 1.auto:自動類型推導 編譯時對變量進行類型推導,不會對程序的運行效率造成影響; 不會影響編譯速度,因為編譯時也要右側推導,然後判斷與左側是否匹配; 通過初始化表達式
升級 gcc g++ 版本 支援-std=c++11 特性
CentOS 6.6 升級GCC G++ (當前最新GCC/G++版本為v6.1.0) 或者 新增yum 的 repo 檔案 也不行, 只能更新到 4.4.7! 採取手動編譯安裝了 1、 獲取安裝包並解壓 wget http://ftp.gnu.org/gnu/g
C++——VisualStudio的c++11特性(一)
前言 檢視官網https://msdn.microsoft.com/library/ 從VisualStudio2010講起,主要是針對c++11特性來研究vs開發c++的IDE的強大之處 VisualStudio2010下載release(釋出版本)地址:https://docs.mi
【程式設計技巧與C++11特性】總結
一,程式設計技巧 1.1排序效能問題 C ++的排序函式有兩種用法: 傳入一個functor物件; 直接傳入一個排序函式。 #include <iostream> #include <ctime> #include <algorithm&
c++ 11 特性之auto
auto並沒有讓C++成為弱型別語言,也沒有弱化變數什麼,只是使用auto的時候,編譯器根據上下文情況,確定auto變數的真正型別。 auto在C++14中可以作為函式的返回值 #include<iostream> auto add(int x,int y) { &nb
[轉載]Visual Studio, GCC, Clang, Intel 對 C++11 特性的支援一覽表
參與翻譯(3人):throwable, jimmyjmh, Khiyuan距離我上次對C++11支援的不同編譯器的比較已經有大半年了。這次我來根據這些預覽版的編譯器的文件來看下它們是如何堆砌起來的。GCC的下個版本是4.8,以及Clang即將到來的版本是3.3 。如果你使用Visual Studio 2012
練習四十六:列表排序,刪除list中重復的元素
結果 clas code lag 轉換 十六 == 但是 列表 方法一:使用集合set;將list直接轉換為set 1 a = [1,3,4,3,5,7] 2 a = list(set(a)) 3 print(a)執行結果:[1, 3, 4, 5, 7]方法二:直
練習四十六:列表排序,刪除list中重複的元素
方法一:使用集合set;將list直接轉換為set 1 a = [1,3,4,3,5,7] 2 a = list(set(a)) 3 print(a) 執行結果: [1, 3, 4, 5, 7] 方法二:直接排序,然後逐個比較,鑑於del會直接把元素刪除,設定個flag陣列來編輯該刪除的
c++11特性裡的多執行緒thread的用法
建立和啟動一條C++執行緒就像在C++原始碼中新增執行緒標頭檔案那麼簡便。我們來看看如何建立一個簡單的帶執行緒的HelloWorld: #include <iostream> #include <thread> using namespace std
如何寫cmake使其包含c++11特性 (-std=c++11如何寫進cmakeList.txt)
g++ 4.8.2 cmake 2.8 之前寫cmkae編譯帶有c++11特性的程式碼有這麼一句: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 但是總會出現cc1plus: error: unrecognized
c++11特性之std::thread--初識二
上篇部落格《c++11特性之std::thread–初識》初步介紹了std::thread,並且介紹了幾個成員函式。 最後的一段程式碼留了點懸念,就是vs2015會報錯,錯誤如下: error
VSVC2010中常用的C++11特性
static_assert 宣告 static_assert宣告在編譯時測試軟體斷言,這與在執行時進行測試的其他斷言機制不同。如果斷言失敗,則編譯也將失敗,且系統將發出指定的錯誤訊息。 const int nValue = 3; static_assert(nValue
C++11特性--新的類功能--特殊的成員函式(移動建構函式,移動賦值運算子),預設方法和禁用方法(default,delete),委託建構函式,管理虛方法(override,final)
class A { public: void fun(int x ) { cout<<x<<endl; }