#include <stdio.h> #include <vector> #include <algorithm> //random_shuffle #include <time.h> int gen(int i) {return rand()%i; } int main() { srand(time(0)); std::vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); random_shuffle(v.begin(), v.end(), gen); for (unsigned int x=0; x<v.size(); x++) printf("%d\n", v[x]); return 0; }
bloggerads
2013年10月31日 星期四
C++: vector Shuffle(洗牌) 函數
C++提供隨機打亂vector的函數, random_shuffle()。若想要每次第一次都是不同的亂法,可以引入一個function pointer, 而這個function限定一個輸入和一個輸出引數, type要和iterator一樣, 且輸出值不能為負數或大於輸入引數值
2013年10月30日 星期三
C++的Container: Vector使用範例
一般C語言如果想要動態增加陣列大小,則必須要呼叫 realloc()。C++提供了vector更靈活的使用陣列,請參考如下的範例:
輸出:
#include <stdio.h> #include <vector> void print(char x, std::vector<int> &vec) // Call by Reference { printf("%c.", x); for (int i=0; i<vec.size(); i++) printf(" %d", vec[i]); puts(""); } int main() { std::vector<int> vec;// vector<int> vec(10, 0); //初始size為10個0 std::vector<int>::iterator end; vec.push_back(10); print('a', vec); vec.push_back(20); print('b', vec); vec.insert(vec.begin() + 1, 30); // 將30插入陣列中第1個位置 //vec.insert(vec.begin() + 1, 2, 30); // 將兩個30插入陣列中第1個位置 print('c', vec); //auto end=vec.end()-1; // -std=c++11 vec.erase(end=vec.end()-1); // 移除最後一個元素 print('d', vec); vec.pop_back(); // 移除最後一個元素 print('f', vec); return 0; }
輸出:
a. 10
b. 10 20
c. 10 30 20
d. 10 30
f. 10
b. 10 20
c. 10 30 20
d. 10 30
f. 10
2013年10月28日 星期一
C++的Container: List使用範例
#include<list> #include<iostream> #include<stdio.h> using namespace std; #define OFFSET_ITERATOR(iterator, offset) {\ iterator = obj1.begin(); \ for (int i=0; i<offset; i++) \ iterator++;\ } //將intertaor移動到offset的節點上 void show_list(); list<int> obj1;//建一個空的list對像 list<int>::iterator j; list<int>::iterator k; int main(void) { for(int i=0;i<10;i++) obj1.push_front(i); show_list(); // Remove first node (pop front) obj1.pop_front(); printf(">obj1.pop_front();\n"); show_list(); // Remove node OFFSET_ITERATOR(j, 4); obj1.erase(j); printf(">obj1.erase(4); //delete node: j-1, i.e. 4\n"); show_list(); // Insert node OFFSET_ITERATOR(j, 4); obj1.insert(j, 55); printf(">obj1.insert(4, 55);\n"); show_list(); // Remove node from j to k-1, where (j, k)=(2, 4) OFFSET_ITERATOR(j, 2); OFFSET_ITERATOR(k, 4); obj1.erase(j, k); printf(">obj1.erase(2, 3); //delete node: j~k-1, i.e. 2~3\n"); show_list(); system("pause"); return 0; } void show_list() { for (j=obj1.begin(); j!=obj1.end(); j++) cout<< *j <<" "; printf("\n"); }
訂閱:
文章 (Atom)