1. 程式人生 > >C/C++中string和vector的一些擴充套件

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++stringvector一些擴充套件

關於vector:轉自 點選開啟連結 向量容器(vector)是一種順序容器,是一塊連續分配的記憶體,支援隨機訪問,從資料安排的角度看,和陣列極其相似,陣列跟vector的區別在於:陣列是靜態分配空間,一旦分配了空間的大小,就不可以再改變了,例如,int a[6];而

c++ stringvector的pop_back push_back的練習

C++中的string和vectorExample 1: 輸入一行字元的集合,遇到換行符結束輸入,並且判斷這個字串物件中的大寫、小寫、空格、數字、以及其他符號個數。Code:#include<iostream> #include<string> //

C++stringvector用法總結

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#stringString的區別

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++stringint的相互轉化

int轉化成string string s = to_string(100); int 轉化成char* char s[128] = {0}; sprintf(s,"%d",100); cha

C++mapvector作形參時如何給定預設引數?

      之前遇到過這種特殊場景, 我用static變數比較噁心地解決了問題, 其實, 有更優雅的方式:#include <iostream> #include <vector>

C++stringstring.h以及cstring,CString的作用區別

1.string與cstring有什麼區別 <string>是C++標準庫標頭檔案,包含了擬容器class std::string的宣告(不過class string事實上只是basic_string<char>的typedef),用於字串操作。

C++stringint相互轉換

string轉int: 標頭檔案: #include <cstdlib> string a; int b; a = "314"; b = atoi(a.c_str()); int轉str

c++listvector的比較

面試中經常會被問到的這個問題,所以順道在這裡去總結一下: 首先 list 1.list是由雙向連結串列實現的,因此記憶體空間是不連續的。2.只能通過指標訪問資料,所以list的隨機存取非常沒有效率,時間複雜度為o(n);3.但由於連結串列的特點,能高效地進行插入和刪除。

C++11lock_guardunique_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++ STLmapunordered_map的區別

map與unordered_map對比 map unordered_map 紅黑樹(屬於非嚴格二叉平衡搜尋樹)實現 雜湊表實現 有序 無序 —— 查詢時間複雜度為O(1

【學步者日記】C#反射NonPublicInstance需要一起使用

完整連結請看: ———————————————————————— 如果在 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迴圈的一種常用組合形式的速記寫法,它把控制迴圈的表示式