1. 程式人生 > >C++ vector的訪問(resize,pu_back與下標訪問的區別)

C++ vector的訪問(resize,pu_back與下標訪問的區別)

在編寫程式碼時發現vector的一個現象
(1)
  std::vector<std::string> str_vector;
  str_vector.resize(3);
  str_vector.push_back("name_1");
  str_vector.push_back("name_2");


 然後進行訪問逐一打印發現:
 for (std::vector<std::string>::iterator iter = str_vector.begin(); iter != str_vector.end(); ++iter)
   {
     std::cout<<*iter<<", ";
  }
  其值為:"","","","name_1","name_2",
  此時發現resize是開闢了三個string空間,而後push_back是接著前面開闢的空間而往裡push.

(2)
  std::vector<std::string> str_vector;
  str_vector.push_back("name_1");
  str_vector.push_back("name_2");

    其值為:"name_1","name_2",

(3)
  std::vector<std::string> str_vector;
  str_vector[0] = "name_1";  //wrong,錯誤,vector大小未知,且沒有元素.
  // 下標只能用於獲取已存在的元素

總結:
 (1)  若想對vector進行下面訪問,則必須空間已開闢,可以用:
          std::vector<std::string> str_vector;
          str_vector.resize(3);
          str_vector[0] = "name_1";  
          str_vector[1] = "name_2";  
          str_vector[2] = "name_3";  
       也可用:
  std::vector<std::string> str_vector;
    str_vector.push_back("name_1");
    str_vector.push_back("name_2");
  for(int i=0; i< str_vector.size(); i++)
         {
           std::cout<<str_vector[i]<<std::endl;
         }

 (2) 請注意resize()與push_back的同時使用,其空間是resize的空間+push_back的空間,否則達不到預設目標.


歡迎大家批評,指正,交流!

聯絡方式:

emai:  [email protected]

相關推薦

C++ vector訪問(resize,pu_back訪問區別)

在編寫程式碼時發現vector的一個現象 (1)   std::vector<std::string> str_vector;   str_vector.resize(3);   str_vector.push_back("name_1");   str_v

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語言二維陣列的運算指標偏移

首先,定義一個二維陣列int Array[y][x];     一、 對於二維陣列的指標偏移的運演算法則。同一維陣列一樣,二維陣列的陣列名也是指向第一個陣列元素的(即Array等於&Array[0][0]),且二維陣列的陣列元素在計算機內的記憶體存放也是連續的,

[work] shell中陣列訪問

shell中陣列的下標預設是從0開始的 1。將字串放在陣列中,獲取其長度 #!/bin/bash str="a b --n d" array=($str) length=${#array[@]} echo $length for ((i=0; i<$length;

關於js如何獲取滑鼠劃過文字的內容

$(document).ready(function () { $(".contenttext").mouseup(function (e) { var txt = window.getSelection(); //獲取滑鼠劃過的物件 if (txt.to

指標計算

差一錯誤是所有程式設計師的噩夢! 它看起來是一個瑣碎的問題,卻非常煩人,許多程式設計師對它是採取一種“輕蔑”的態度,即使被它虐了千百遍,還是不願意正視這個問題。 其實,差一問題並不是一個小問題,我們應該對它給予足夠的重視。 在《C陷阱與缺陷》中,對這個問題有詳細的討論,這裡

C++STL中常用的容器[]運算

在C++STL中常用的容器和型別,下面哪些支援下標"[]"運算? 正確答案: A C D F I   你的答案: B H I (錯誤) vector list deque m

swift的字串的訪問

訪問首元素 訪問最後一個元素 文件: The endIndex property is the position after the last character in a String

C++】過載二維陣列 [ ][ ]

寫在文章開頭的話 讀完這篇文章後,你將學習到下面的知識: (1)一個多維陣列是如何工作的 (2)如何過載二維陣列下標 1. 分析 過載一維陣列下標很簡單,通過下標傳入的索引值,返回內部陣列中相應的值。那過載二維陣列的下標運算呢? 其實過載二維和一維本質是一樣的,因為 C/

c++ vector(向量)使用方法詳解(順序訪問vector的多種方式)

vector是向量型別,它可以容納許多型別的資料,如若干個整數,所以稱其為容器,本文介紹一下使用方法。 vector 是向量型別,它可以容納許多型別的資料,如若干個整數,所以稱其為容器。vector 是C++ STL的一個重要成員,使用它時需要包含標頭檔案:

C++ 類 直接定義物件new物件的區別

new建立類物件與直接定義的區別 new建立物件的特點 new建立類物件需要指標接收,一處初始化,多處使用 new建立類物件使用完需delete銷燬 new建立物件直接使用堆空間,而區域性不用new定義類物件則使用棧空間 new物件指標用途廣泛,比如作

c++物件建立帶括號無括號的區別

class Test { public:   Test() {}   Test(int a) {} } 1、棧上建立物件   1.1 無括號     Test a; // 呼叫預設建構函式,棧上分配記憶體建立物件   1.2 有括號     Test a(); // 無任何意義,宣告一個返回

UNITY3D c#指令碼中處理類結構體的區別

結構體的定義: 結構體也可以象類一樣可以單獨定義.class a{};struct a{}; 結構體也可以在名字前面加入控制訪問符.public struct student{};internal struct student{}; 如果結構體student沒有publice或者internal的宣告 類pr

C#窗體的Load事件Shown事件的區別

Load:在第一次顯示窗體前發生。 <pre name="code" class="csharp"> private void Form1_Load(object sender, Eve

c語言中char *name char name 的區別

要點:char* name="abc"指的是常量字串,不可以修改指標,是相容老的寫法;char[] name="abc"是指標,可以修改;在學習過程中發現了一個以前一直預設的錯誤,同樣char *c = "abc"和char c[]="abc",前者改變其內容程式是會崩潰的,

C\C++中標頭檔案stringstring.h的區別

Opencv學堂 http://mp.weixin.qq.com/s?__biz=MzA4MDExMDEyMw==&mid=100000109&idx=1&sn=7540b49e869c3e27f87c84f6f3dfe9a8&chksm

探索C語言中單引號雙引號的區別

今天看了《C陷阱與缺陷》中對””與’’的描述,’’引起的一個字元代表一個整數,整數值對應於該字元在編譯器採用的字符集中的序列值;””引起的字串代表的是一個指向無名陣列起始字元的指標。對這兩個符號產生了興趣,遂開啟VS2010查看了單引號、雙引號引起的字元在記憶體中的儲存形式

C語言中全域性變數靜態全域性變數區別

 全域性變數(外部變數)的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式。 這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式, 當一個源程式由多個原始檔組成時,非靜態

c++ fill函式,fillmemset函式的區別

【C++】fill函式,fill與memset函式的區別 memset函式 按照位元組填充某字元在標頭檔案<cstring>裡面 fill函式 按照單元賦值,將一個區間的元素都賦同一個值在標頭檔案<algorithm>裡面 因為memset

C語言中 陣列名 ”&陣列名” 的區別

(1) 測試程式碼 :#include<stdio.h>int main(){    int a[5] = {1,2,3,4,5};    printf("a = %p\n",a);         // 陣列名代表首地址 .        00000000006