C/C++中string和vector的一些擴充套件
關於vector:轉自 點選開啟連結
向量容器(vector)是一種順序容器,是一塊連續分配的記憶體,支援隨機訪問,從資料安排的角度看,和陣列極其相似,陣列跟vector的區別在於:陣列是靜態分配空間,一旦分配了空間的大小,就不可以再改變了,例如,int a[6];而vector是動態分配記憶體,隨著元素的不斷插入,它會按照自身的一套機制不斷擴充自身的容量,vector容器的容量增長是按照容器現在容量的一倍進行增長。
begin函式:
函式原型:
iterator begin();
const_iterator begin();
功能:
返回一個當前vector容器中起始元素的迭代器。
end函式:
函式原型:
iterator end();
const_iterator end();
功能:
返回一個當前vector容器中末尾元素的迭代器。
front函式:
函式原型:
reference front();
const_reference front();
功能:
返回當前vector容器中起始元素的引用。
back函式:
函式原型:
reference back();
const_reference back();
功能:
返回當前vector容器中末尾元素的引用。
例項:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<char> v1;
vector<char>::iterator iter1;
vector<char>::iterator iter2;
v1.push_back('m');
v1.push_back('n');
v1.push_back('o');
v1.push_back('p');
cout << "v1.front() = " << v1.front() << endl;
cout << "v1.back() = " << v1.back() << endl;
iter1 = v1.begin();
cout << *iter1 << endl;
iter2 = v1.end()-1; //注意v1.end()指向的是最後一個元素的下一個位置,所以訪問最後一個元素
//的正確操作為:v1.end() -
1;
cout << *iter2 << endl;
return 0;
}
輸出結果:
v1.front() = m
v1.back() = p
m
p
關於string:轉自點選開啟連結
一:find
函式原型:
size_t find ( const string& str, size_t pos = 0 ) const;
size_t find ( const char* s, size_t pos, size_t n ) const;
size_t find ( const char* s, size_t pos = 0 ) const;
size_t find ( char c, size_t pos = 0 ) const;
引數說明:pos查詢起始位置 n待查詢字串的前n個字元
使用樣例:
string str1("the usage of find can you use it");
string str2("the");
上面定義出了兩個字串;
str1.find(str2); // 從串str1中查詢時str2,返回str2中首個字元在str1中的地址
str1.find(str2,5); // 從str1的第5個字元開始查詢str2
str1.find("usage"); // 如果usage在str1中查詢到,返回u在str1中的位置
str1.find("o"); // 查詢字元o並返回地址
str1.find("of big",2,2); // 從str1中的第二個字元開始查詢of big的前兩個字元
二:find_first_of
函式原型:
size_t find_first_of ( const string& str, size_t pos = 0 ) const;
size_t find_first_of ( const char* s, size_t pos, size_t n ) const;
size_t find_first_of ( const char* s, size_t pos = 0 ) const;
size_t find_first_of ( char c, size_t pos = 0 ) const;
引數和find基本相同,不在贅述!
特別注意:
find_first_of 函式最容易出錯的地方是和find函式搞混。它最大的區別就是如果在一個字串str1中查詢另一個字串str2,如果str1中含有str2中的任何字元,則就會查詢成功,而find則不同;
比如:
string str1("I am change");
string str2("about");
int k=str1.find_first_of(str2); //k返回的值是about這5個字元中任何一個首次在str1中出現的位置;
//the usage of find /find_first_of by heat_nan from ZZULI
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str1("Hi,every one! I am heat_nan from ZZULI. one");
string str2("heat_nan");
int k=str1.find(str2);
cout<<"The position of 'heat_nan' is "<<k<<endl;
int k1=str1.find("one");
cout<<"The postion of the first 'one' is "<<k1<<endl;
int k2=str1.find("one of",k1+1,3);
cout<<"The postion of the second 'one' is "<<k2<<endl;
int k3=str1.find_first_of("aeiou");//here k3=1
while(k3!=string::npos) //hint: here "string::npos"means find failed
{
str1[k3]='*';
k3=str1.find_first_of("aeiou",k3+1);
}
cout<<str1<<endl;
return 0;
}
相關推薦
C/C++中string和vector的一些擴充套件
關於vector:轉自 點選開啟連結 向量容器(vector)是一種順序容器,是一塊連續分配的記憶體,支援隨機訪問,從資料安排的角度看,和陣列極其相似,陣列跟vector的區別在於:陣列是靜態分配空間,一旦分配了空間的大小,就不可以再改變了,例如,int a[6];而
c++ 中string和vector中的pop_back push_back的練習
C++中的string和vectorExample 1: 輸入一行字元的集合,遇到換行符結束輸入,並且判斷這個字串物件中的大寫、小寫、空格、數字、以及其他符號個數。Code:#include<iostream> #include<string> //
C++中string和vector用法總結
string 包含標頭檔案:#include<string> 申明名稱空間:using std::string ; 1) 初始化 string s1; //Default initialization; s1 is an empty string
c++ 中 string 和 const char * 中的相同和不同,遇到的坑。
#include<iostream> #include<string> using namespace std; string ToString(int i) { string str = std::to_string(i); return str; } int mai
C#中string和String的區別
string是String的別名。string是c#中的類,String是.net Framework的類(在c# IDE中不會顯示藍色) c# string對映為.net Framework的String 如果用string,編譯器會把它編譯成String,所以如果直接用String就可以讓編譯器少做一點點
C++中陣列和vector的比較
一、陣列C++中陣列是一種內建的資料型別。陣列是存放型別相同的物件的容器,陣列的大小確定不變,不能隨意向陣列中增加元素。1、定義和初始化內建陣列(1)陣列的大小不變,(a[d],d為陣列的維度),陣列的維度必須是一個常量表達式。定義陣列的時,必須指定陣列的型別和大小。(2)初
C++中string和int的相互轉化
int轉化成string string s = to_string(100); int 轉化成char* char s[128] = {0}; sprintf(s,"%d",100); cha
C++中map和vector作形參時如何給定預設引數?
之前遇到過這種特殊場景, 我用static變數比較噁心地解決了問題, 其實, 有更優雅的方式:#include <iostream> #include <vector>
C++中string和string.h以及cstring,CString的作用和區別
1.string與cstring有什麼區別 <string>是C++標準庫標頭檔案,包含了擬容器class std::string的宣告(不過class string事實上只是basic_string<char>的typedef),用於字串操作。
C++中string和int相互轉換
string轉int: 標頭檔案: #include <cstdlib> string a; int b; a = "314"; b = atoi(a.c_str()); int轉str
c++中list和vector的比較
面試中經常會被問到的這個問題,所以順道在這裡去總結一下: 首先 list 1.list是由雙向連結串列實現的,因此記憶體空間是不連續的。2.只能通過指標訪問資料,所以list的隨機存取非常沒有效率,時間複雜度為o(n);3.但由於連結串列的特點,能高效地進行插入和刪除。
C++11中lock_guard和unique_lock的區別
target san color member uri display each for clas c++11中有一個區域鎖lock_guard,還有第二個區域鎖unique_lock。 區域鎖lock_guard使用起來比較簡單,除了構造函數外沒有其他member fu
C語言運算符 / 和%的一些註意事項
左右 color 註意事項 cnblogs 計算 print result 使用 5.0 1.double無法使用取余符號%,浮點數無法取余,如170%30.48或170.8%7無法計算 如果要計算,(1)乘以相應的倍數轉成整形,取余,再除以相應的倍數,轉為double型
C++ STL中map和unordered_map的區別
map與unordered_map對比 map unordered_map 紅黑樹(屬於非嚴格二叉平衡搜尋樹)實現 雜湊表實現 有序 無序 —— 查詢時間複雜度為O(1
【學步者日記】C#反射中NonPublic和Instance需要一起使用
完整連結請看: ———————————————————————— 如果在 BindingFlag 中使用 NonPublic/Public 時必須同時(我在看別人的教程時候並沒有強調同時)使用 Static/Instance 否則將會返回null。 參考程式碼 ▼程式碼開始 using System
C語言程式語言科技 c語言中的= 和= =有什麼區別?(精華篇)
一等賦,二等於。 C語言中,很多初學者經常會弄混 = 與 == 。我們從小學習數學時就知道“ = ”是 “等於”的意思,可是在C語言中,“ = ”就不是等於的意思了。 我寫了如下的C語言程式碼: 在上述C語言程式碼中,整型變數 a 的初始值是0。在兩個 if 語句判
C語言中的*和&符號
之前對*和&符號一直理解的比較淺顯。只知道: *p好像表示的是一個指標; &p表示的是一個地址。 然而這次當遇到了下面這個情況的時候: int a = 10; int *b = &a; printf(“%d\n”, a); printf(“%d\n”, &
C語言中宣告和定義詳解
變數宣告和變數定義 變數定義:用於為變數分配儲存空間,還可為變數指定初始值。程式中,變數有且僅有一個定義。 變數宣告:用於向程式表明變數的型別和名字。 定義也是宣告,extern宣告不是定義 定義也是宣告:當定義變數時我們聲明瞭它的型別和
全程剖析C語言中堆和棧的區別
1.申請方式 (1)棧(satck):由系統自動分配。例如,宣告在函式中一個區域性變數int b;系統自動在棧中為b開闢空間。 (2)堆(heap):需程式設計師自己申請(呼叫malloc,realloc,calloc),並指明大小,並由程式設計師進行釋放。容易產生memory leak. eg:
對C語言中語句部分的一些總結。
C的許多語句的行為和其他語言中的類似語句相似。 if語句根據條件執行語句,while語句重複執行一些語句。 由於C並不具備布林型別,所以這些語句在測試值時用的都是整型表示式。 零值被解釋為假,非零值被解釋為真。 for語句是while迴圈的一種常用組合形式的速記寫法,它把控制迴圈的表示式