C++ vector的訪問(resize,pu_back與下標訪問的區別)
(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++中標頭檔案string與string.h的區別
Opencv學堂 http://mp.weixin.qq.com/s?__biz=MzA4MDExMDEyMw==&mid=100000109&idx=1&sn=7540b49e869c3e27f87c84f6f3dfe9a8&chksm
探索C語言中單引號與雙引號的區別
今天看了《C陷阱與缺陷》中對””與’’的描述,’’引起的一個字元代表一個整數,整數值對應於該字元在編譯器採用的字符集中的序列值;””引起的字串代表的是一個指向無名陣列起始字元的指標。對這兩個符號產生了興趣,遂開啟VS2010查看了單引號、雙引號引起的字元在記憶體中的儲存形式
C語言中全域性變數與靜態全域性變數區別
全域性變數(外部變數)的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式。 這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式, 當一個源程式由多個原始檔組成時,非靜態
c++ fill函式,fill與memset函式的區別
【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