c++非變易算法-stl算法。本站提示廣大學習愛好者:(c++非變易算法-stl算法)文章只能為提供參考,不一定能成為您想要的結果。以下是c++非變易算法-stl算法正文
先給年夜家這是下後果圖:
谷歌供給的v4包,ViewPager
在結構文件中,先添加<android.support.v4.view.ViewPager/>控件,這個只是輪播的區域
在結構文件中,安排題目描寫部門
線性結構,豎向分列,配景色黑色半通明,這個結構和下面的ViewPager底部對齊layout_alignBottom=”@id/xxx”
<TextView/>居中顯示,
小點部門,先放過空的LinearLayout,id是ll_points在代碼中對其停止填充
獲得ViewPager對象
挪用ViewPager對象的setAdapter()辦法,參數:PagerAdapter對象
由於PagerAdapter是籠統類,界說一個MyPagerAdapter繼續PagerAdapter,完成以下辦法
重寫getCount()辦法,前往輪播的個數
重寫isViewFromObject()辦法,前往布爾值,
重寫instantiateItem()辦法,將以後view對象添加到ViewGroup對象,前往以後對象
重寫destroyItem()辦法,從以後container中刪除指定地位(position)的View
切換描寫題目字符串
界說一個String[]數組,保留題目
挪用ViewPager對象的setOnPagerChangeListener()辦法,參數:OnPagerChangeListener對象
匿名外部類完成,重寫以下辦法
onPageSelected()辦法,頁面切換後挪用,傳遞進參數,int索引
onPageScrolled()辦法,當頁面正在轉動的時刻
onPageScrollStateChanged()辦法,當頁面轉動狀況轉變的時刻
小圖標部門
新建兩個shape文件,應用xml畫兩個原點
添加節點<shape>,設置外形為原型android:shape=”oval”
添加尺寸節點<size> ,設置寬度,高度,android:width=”” android:height=””
添加色彩節點<solid>,設置色彩 android:color=””
正常情形下,灰色點,核心的時刻,白色的點,兩個xm文件的色彩紛歧樣
point.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <size android:height="4dp" android:width="4dp" /> <solid android:color="#aaffffff"/> </shape>
point_write.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <size android:height="4dp" android:width="4dp" /> <solid android:color="#ffffffff"/> </shape>
新建一個selector文件,當圖片enable的時刻白色的點,弗成用的時刻灰色的點,分歧的狀況分歧的圖片
添加<selector>節點
添加<item>節點,設置圖片屬性android:drawable=”” 設置狀況android:enabled=”true|false”
point_selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/point" android:state_enabled="false"></item> <item android:drawable="@drawable/point_write" android:state_enabled="true"></item> </selector>
輪回年夜圖片的個數,創立ImageView對象,
挪用ImageView對象setImageResource()辦法,設置資本,參數:selector文件
挪用ImageView對象的setLayoutParams()辦法,給小圖標ImageView對象添加一些margin值,參數:LayoutParams對象,獲得LinearLayout.LayoutParams對象,挪用LayoutParams對象的rightMargin()辦法,設置margin值
挪用ImageView對象的setEnabled()辦法,設置能否可用,參數:布爾值
獲得LinearLayout對象,挪用LinearLayout對象的addView()辦法,把小圖標的視圖填出來,參數:ImageView對象
默許第一個是核心,跟著圖片滑動,核心隨著轉變
package com.tsh.myviewpager; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.support.v.view.PagerAdapter; import android.support.v.view.ViewPager; import android.support.v.view.ViewPager.OnPageChangeListener; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; public class MainActivity extends Activity { private ViewPager vp_banner; private LinearLayout ll_points; private TextView tv_title; private List<View> banners; private String[] titles=new String[]{ "消息題目", "消息題目", "消息題目" }; private List<ImageView> points=new ArrayList<ImageView>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化 vp_banner = (ViewPager) findViewById(R.id.vp_banner); ll_points = (LinearLayout) findViewById(R.id.ll_points); tv_title = (TextView) findViewById(R.id.tv_title); // banner部門 banners = new ArrayList<>(); ImageView img = new ImageView(this); img.setImageResource(R.drawable.a); banners.add(img); ImageView img = new ImageView(this); img.setImageResource(R.drawable.b); banners.add(img); ImageView img = new ImageView(this); img.setImageResource(R.drawable.c); banners.add(img); //小圖標 ll_points=(LinearLayout) findViewById(R.id.ll_points); for(int i=;i<banners.size();i++){ ImageView image=new ImageView(this); image.setImageResource(R.drawable.point_selector); LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(, ); params.rightMargin=; image.setLayoutParams(params); ll_points.addView(image); if(i==){ image.setEnabled(true); }else{ image.setEnabled(false); } points.add(image); } // 設置適配器 vp_banner.setAdapter(new MyPagerAdapter()); vp_banner.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg) { tv_title.setText(titles[arg]); //小圖標處置 for(ImageView point:points){ point.setEnabled(false); } points.get(arg).setEnabled(true); } @Override public void onPageScrolled(int arg, float arg, int arg) { // TODO Auto-generated method stub } @Override public void onPageScrollStateChanged(int arg) { // TODO Auto-generated method stub } }); } private class MyPagerAdapter extends PagerAdapter { @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(banners.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(banners.get(position)); return banners.get(position); } @Override public int getCount() { return banners.size(); } @Override public boolean isViewFromObject(View arg, Object arg) { return arg == arg; } } }
以上所述是小編給年夜家引見的Android開辟之滑動圖片輪播題目核心的相干常識,願望對年夜家有所贊助!
ector<int>::iterator iv = find_first_of(v.begin(), v.end(), v2.begin(), v2.end());輸入成果為:
The position of the first equal element is 3
元素統盤算法
count函數
該函數用於盤算容器中某個給定值的湧現次數。它有兩個應用原型,差別在於計數是直接前往照樣援用前往。
上面的實例法式盤算了容器中5的湧現次數,成果直接前往。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(void) {
vector<int> v;
for(int i = 0; i < 17; i++) {
v.push_back(i % 6);
}
int num = count(v.begin(), v.end(), 5);
cout << "The number of 5 is " << num << endl;
return 0;
}
輸入成果為:
The number of 5 is 2
count_if函數
該函數應用謂詞斷定函數,統計迭代器區間上知足前提的元素個數。它有兩個應用原型,差別在與計數是直接前往照樣援用前往。
上面的實例法式統計了容器中年夜於10的數字的湧現次數,成果直接前往。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int greaterThan10(int x) {
return x > 10 ? 1 : 0;
}
int main(void) {
vector<int> v;
for(int i = 0; i < 17; i++) {
v.push_back(i);
}
int num = count_if(v.begin(), v.end(), greaterThan10);
cout << "The number of the figure that greater than 10 is " << num << endl;
return 0;
}
輸入成果為:
The number of the figure that greater than 10 is 6
序列婚配算法
mismatch函數
該函數用於比擬兩個序列,找出首個不婚配元素的地位。它有兩個應用原型,分離為不相等和不知足二元謂詞前提。
該函數還觸及到pair的應用。
上面的實例法式比擬兩個整型容器,並找出不婚配的數字。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(void) {
vector<int> v1, v2;
v1.push_back(3);
v1.push_back(5);
v1.push_back(5);
v2.push_back(3);
v2.push_back(5);
v2.push_back(7);
pair<vector<int>::iterator, vector<int>::iterator> result = mismatch(v1.begin(), v1.end(), v2.begin());
if(result.first == v1.end() && result.second == v2.end()) {
cout << "v1 is same as v2." << endl;
} else {
cout << "The dismatching figure are "
<< *(result.first) << " and "
<< *(result.second) << endl;
}
return 0;
}
輸入成果為:
The dismatching figure are 5 and 7
equal函數
該函數一一比擬兩個序列的元素能否相等,前往值為true/false,不前往迭代器值。它有兩個應用原型,分離為元素相等和二元謂詞斷定前提。
上面的實例法式用於比擬兩容器中數字相對值能否相等。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int absEqual(int x, int y) {
//return (x == abs(y) || y == abs(x)) ? 1 : 0;
return abs(x) == abs(y) ? 1 : 0;
}
int main(void) {
vector<int> v1, v2;
v1.push_back(3);
v1.push_back(5);
v1.push_back(5);
v2.push_back(3);
v2.push_back(5);
v2.push_back(-5);
if(equal(v1.begin(), v1.end(), v2.begin(), absEqual)) {
cout << "The elements of v1 and v2 are equal in abosolute value." << endl;
} else {
cout << "The elements of v1 and v2 are not equal in abosolute value." << endl;
}
return 0;
}
輸入成果為:
The elements of v1 and v2 are equal in abosolute value.
子序列搜刮算法
search函數
該函數在一個序列中搜刮與另外一序列婚配的子序列。它有兩個應用原型,分離為完整婚配和二元謂詞斷定。婚配勝利則前往子序列的首個元素的迭代器值。
search函數與find_first_of函數形似,但不雷同。search找的是一塊雷同的區域,請求這塊區域與前面列表的元素及其次序雷同;find_first_of找的是一個元素,只需這個元素是前面一個列表的隨意率性一個就行。
上面的實例法式解釋了search與find_first_of的分歧。
#include <iostream>
#include <algorithm>
#include <vector>
int main(void) {
vector<int> v1, v2;
v1.push_back(1);
v1.push_back(4);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v2.push_back(2);
v2.push_back(3);
v2.push_back(4);
vector<int>::iterator ivSearch, ivFind;
ivSearch = search(v1.begin(), v1.end(), v2.begin(), v2.end());
ivFind = find_first_of(v1.begin(), v1.end(), v2.begin(), v2.end());
cout << "Position of search: " << ivSearch - v1.begin() << endl;
cout << "Position of find_first_of: " << ivFind - v1.begin() << endl;
return 0;
}
輸入成果為:
Position of search: 2
Position of find_first_of: 1
search_n函數
該函數用於搜刮序列中能否有一系列元素值均為某個給定值的子序列。它有兩個應用原型,分離為值相等和知足謂詞斷定前提。
上面的實例法式展現了尋覓3個持續的數字8的進程。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(void) {
vector<int> v;
v.push_back(3);
v.push_back(8);
v.push_back(8);
v.push_back(8);
v.push_back(4);
vector<int>::iterator iv = search_n(v.begin(), v.end(), 3, 8);
if(iv == v.end()) {
cout << "There are no three consecutive 8." << endl;
} else {
cout << "Three consecutive 8 is founded." << endl;
}
return 0;
}
成果輸入為:
Three consecutive 8 is founded.
find_end函數
該函數用於在一個序列中搜刮出最初一個與另外一序列婚配的子序列。用search函數感化類似,偏向相反。
上面的實例法式,展現了搜刮容器v中最初一個與v1婚配的子序列的進程。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(void) {
vector<int> v, v2;
v.push_back(1);
v.push_back(3);
v.push_back(5);
v.push_back(3);
v.push_back(5);
v.push_back(7);
v2.push_back(3);
v2.push_back(5);
vector<int>::iterator iv = find_end(v.begin(), v.end(), v2.begin(), v2.end());
if(iv != v.end()) {
cout << "The position of last matching subsequence is " << iv - v.begin() << endl;
}
return 0;
}
輸入成果為:
The position of last matching subsequence is 3