C 學習札記20140312

2021-06-20 22:31:15 字數 1455 閱讀 5660

謹記,但凡使用了迭代器的迴圈體,都不要向迭代器所屬的容器新增元素!!

vector物件可以動態增長,但不能應用在範圍for的語句中對vector物件增加元素,還有任何改變vector物件容量的操作都會使得該物件的迭代器失效!!!

不能解引用迭代器的end成員所指向的元素,因為end是指向迭代器的尾後,解引用就越界操作了

程式設計練習 要求讀入一段文字到vector物件,每個單詞儲存為vector中的乙個元素,把vector物件中每個單詞轉化為大寫字母,輸出vector物件中轉化後的元素,8個單詞為一行,必須使用迭代器訪問vector和string物件中的元素

參考程式

#include #include #include #include using namespace std;

int main()

if (svec.size() == 0)

static int cnt = 0;

for (vector::iterator i = svec.begin(); i != svec.end(); i++)

}cout << ' ';

cnt++;

if (cnt % 8 == 0)

}return 0;

}

參考程式2

//迭代器加下標運算子

string str;

vectorsvec;

while (cin >> str)

if (svec.size() == 0)

static int cnt = 0;

for (vector::iterator i = svec.begin(); i != svec.end(); i++)

}cout << ' ';

cnt++;

if ((cnt%8) == 0)

}

使用迭代器經典演算法二分搜尋

#include #include #include #include using namespace std;

int main()

cout << "please input a number you want searching: ";

int isch;

cin >> isch; //輸入要搜尋的值

cout << endl;

auto beg = ivec.begin(), end = ivec.end();

auto mid = ivec.begin() + (end-beg)/2; //因為沒有兩個迭代器相加操作是未定義的,如果相加會出現編譯

while ( mid != end && isch != *mid)

else

mid = beg + (end - beg)/2;

} if (mid == end)

{ cout << "can not find number!!" <

C 學習札記20140318

陣列的兩個特殊性質1不允許拷貝陣列,2使用陣列時會將其轉換成指標 我們可以把形參寫成類似陣列的形式 儘管形式不同,但是這三個函式是等價的,形參完全一樣 const int void print const int void print const int 函式的意圖是作用乙個陣列 void prin...

C 學習札記 2011 10 06

1 為了書寫方便,可將short int簡寫成short,即預設情況下short表示的意思是短整形,可類推long則表示長整型 2 單精度 float 32bit 雙精度 double 64bit 長精度 long double 80bit 統稱為浮點型 或實數型別 3 在c 中,整型常量可以用十進...

C 學習札記 2011 09 30

1 物件由屬性 attribute 和服務 service 兩部分組成 2 物件的屬性值只應由這個物件的服務來讀取和修改 3 具有相似屬性和行為的一組物件,成為類 class 4 在已有類的基礎上通過增加新的特性而派生出新的類,稱作繼承 原有類稱作一般類或基類,新建立的類則稱為特殊類或派生類 5 繼...