当前位置:  编程技术>移动开发
本页文章导读:
    ▪STL中的"集合类"的定义施用        STL中的"集合类"的定义使用 STL 中的" 集合类" 的定义使用     #include   <set> #include   <iostream> using   namespace   std; typedef   set <double,   less <double> ,   allocator <double>   &.........
    ▪ 用UITableViewCell兑现电子书平铺书架效果        用UITableViewCell实现电子书平铺书架效果 原创文章,如需转载请注明:转载自:舵手程序 http://www.helmsmansoft.com/index.php/archives/70现阶段网上讲解的实现这种效果的文章一般都是用UIVIew 去加载.........
    ▪ 关于onTouch跟onClick事件处理机制(转载)       关于onTouch和onClick事件处理机制(转载) Button的onTouch,onClick,onLongClick事件发生先后顺序和关联:一,onTouch返回false首先是onTouch事件的down事件发生,此时,如果长按,触发onLongClick事件;然后.........

[1]STL中的"集合类"的定义施用
    来源: 互联网  发布时间: 2014-02-18
STL中的"集合类"的定义使用
STL 中的" 集合类" 的定义使用

 

 

#include   <set>
#include   <iostream>
using   namespace   std;
typedef   set <double,   less <double> ,   allocator <double>   >   set_type;
ostream&   operator < <(ostream&   out,   const   set_type&   s)
{
copy(s.begin(),   s.end(),ostream_iterator <set_type::value_type,char> (cout, "   "));
return   out;
}
int   main(void)
{
//   create   a   set   of   doubles
set_type       sd;
int                   i;
for   (i   =   0;   i   <   10;   ++i)   {
//   insert   values
sd.insert(i);
}

//   print   out   the   set
cout   < <   sd   < <   endl   < <   endl;
//   now   let’s   erase   half   of   the   elements   in   the   set
int   half   =   sd.size()   > >   1;
set_type::iterator   sdi   =   sd.begin();
advance(sdi,half);
sd.erase(sd.begin(),sdi);
//   print   it   out   again
cout   < <   sd   < <   endl   < <   endl;
//   Make   another   set   and   an   empty   result   set
set_type   sd2,   sdResult;
for   (i   =   1;   i   <   9;   i++)
sd2.insert(i+5);
cout   < <   sd2   < <   endl;
//   Try   a   couple   of   set   algorithms
set_union(sd.begin(),sd.end(),sd2.begin(),sd2.end(),

    inserter(sdResult,sdResult.begin()));
cout   < <   "Union: "   < <   endl   < <   sdResult   < <   endl;
sdResult.erase(sdResult.begin(),sdResult.end());
set_intersection(sd.begin(),sd.end(),
  sd2.begin(),sd2.end(),
  inserter(sdResult,sdResult.begin()));
cout   < <   "Intersection: "   < <   endl   < <   sdResult   < <   endl;
return   0;
}

Program   Output

0   1   2   3   4   5   6   7   8   9
5   6   7   8   9
6   7   8   9   10   11   12   13
Union:
5   6   7   8   9   10   11   12   13
Intersection:
6   7   8   9

 

#include   <iostream>
#include   <set>
using   namespace   std;
int   main(int   argc,   char*   argv[])
{
                set <int>   myset;
                for(int   i=1;i <=10;i++)
                myset.insert(i);
                set <int> ::iterator   it;
                for(it=myset.begin();it!=myset.end();++it)
                cout < <*it;
                return   0;
}

 

C++ Sets(集合)
    set和map一样属于关联容器,set是集合,map是映射。若元素类型为int,double,string就会自动进行(默认是升序)排序(使用平衡二叉树来实现),使用自定义类型而未定义比较运算符就不能自动排序了。set容器不支持随机访问。

函数列表:
begin()返回指向第一个元素的迭代器
clear()清除所有元素
count()返回某个值元素的个数
empty()如果集合为空,返回true
end()返回指向最后一个元素的迭代器
equal_range()返回集合中与给定值相等的上下限的两个迭代器
erase()删除集合中的元素
find()返回一个指向被查找到元素的迭代器
get_allocator()返回集合的分配器
insert()在集合中插入元素
lower_bound()返回指向大于(或等于)某值的第一个元素的迭代器
key_comp()返回一个用于元素间值比较的函数
max_size()返回集合能容纳的元素的最大限值
rbegin()返回指向集合中最后一个元素的反向迭代器
rend()返回指向集合中第一个元素的反向迭代器
size()集合中元素的数目
swap()交换两个集合变量
upper_bound()返回大于某个值元素的迭代器
value_comp()返回一个用于比较元素间的值的函数

////////////////////////////////////////////////////////////////////////////////////
构造函数
explicit set(const Pred& comp = Pred(), const A& al = A());
set(const set& x);
set(const value_type *first, const value_type *last,
    const Pred& comp = Pred(), const A& al = A());
实际中可能使用的形式:
1.set c 定一一个空的set对象。
2.set c(op) 定一一个空的set对象,指定排序规则。
3.set c(set& other) 定义一个set对象,拷贝所有的other元素到c中。
4.set c(begin, end, op) 定义一个set对象,拷贝所有的从begin到end的元素到c中,并指定op进行排队。
5.set c(begin, end) 定义一个set对应,初始化c从begin到end。

begin
语法:
iterator begin();
返回指向当前集合中第一个元素的迭代器。
clear
语法:
void clear();
清除当前集合中的所有元素。
count
语法:
size_type count( const key_type &key );
返回当前集合中出现的某个值的元素的数目。
empty
语法:
bool empty();
如果当前集合为空,返回true;否则返回false。
end
语法:
const_iterator end();
返回指向当前集合中最后一个元素的迭代器。
equal_range
语法:
pair equal_range( const key_type &key );
返回集合中与给定值相等的上下限的两个迭代器。
erase
语法:
void erase( iterator i );
void erase( iterator start, iterator end );
size_type erase( const key_type &key );
说明:
1. 删除i元素;
2. 删除从start开始到end结束的元素;
3. 删除等于key值的所有元素(返回被删除的元素的个数)。
find
语法:
iterator find( const key_type &key );
在当前集合中查找等于key值的元素,并返回指向该元素的迭代器。如果没有找到,则返回end()。
get_allocator
语法:
allocator_type get_allocator();
返回当前集合的分配器。
insert
语法:
iterator insert( iterator i, const TYPE &val );
void insert( input_iterator start, input_iterator end );
pair insert( const TYPE &val );
说明:
1. 在迭代器i前插入val;
2. 将迭代器start开始到end结束返回内的元素插入到集合中;
3. 在当前集合中插入val元素,并返回指向该元素的迭代器和一个布尔值来说明val是否成功的被插入了。(应该注意的是在集合(Sets)中不能插入两个相同的元素。)
示例:
#include <iostream>
#include <set>
#include<string>
using namespace std;
typedef struct tagStudentInfo
{
       int      nID;
       string   strName;
       bool operator <(tagStudentInfo const& _A) const//升序排列
       {
          //这个函数指定排序策略,按nID排序,如果nID相等的话,按strName排序
           if(nID<_A.nID) return true;
           if(nID == _A.nID) return strName.compare(_A.strName) < 0;
           return false;
       }
}StudentInfo,*PStudentInfo; //学生信息

void main()
{

    set<StudentInfo>setStudent;
    StudentInfo stuInfo;
    stuInfo.nID = 1;
    stuInfo.strName="student_one";
    pair<set<StudentInfo>::iterator,bool>set_ptr;
set_ptr=setStudent.insert(stuInfo);
   
    stuInfo.nID=1;
    stuInfo.strName="student_one";
    set_ptr=setStudent.insert(stuInfo);
    if(!set_ptr.second){ cout<<"don`t insert!"<<endl; }
   
    stuInfo.nID=2;
    stuInfo.strName="student_two";
    set_ptr=setStudent.insert(stuInfo);
    if(!set_ptr.second){ cout<<"don`t insert 2!"<<endl; }
set<StudentInfo>::iterator p=setStudent.begin();
    for(p;p!=setStudent.end();p++)
{
     cout<<(*p).nID<<" "<<(*p).strName<<endl;
}
}
输出结果:
        don`t insert!
        1 student_one
        2 student_two

lower_bound
语法:
iterator lower_bound( const key_type &key );
返回一个指向小于或者等于key值的第一个元素的迭代器
key_comp
语法:
key_compare key_comp();
返回一个用于元素间值比较的函数对象。
max_size
语法:
size_type max_size();
返回当前集合能容纳元素的最大限值。
rbegin
语法:
reverse_iterator rbegin();
返回指向当前集合中最后一个元素的反向迭代器。
rend
语法:
reverse_iterator rend();
返回指向集合中第一个元素的反向迭代器。
size
语法:
size_type size();
返回当前集合中元素的数目。
swap
语法:
void swap( set &object );
交换当前集合和object集合中的元素。
upper_bound
语法:
iterator upper_bound( const key_type &key );
在当前集合中返回一个指向大于Key值的元素的迭代器。
value_comp
语法:
value_compare value_comp();
返回一个用于比较元素间的值的函数对象。
set的集合功能(须#include<algorithm>):
1.两个有序集的并.
set_union(s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(s,s.begin()));
三个set对象,分别为s1,s2,s.set_union的功能是将s1的某个序列(比如[s1.begin(),s1.end()))与s2的某个序列(比如[s2.begin(),s2.end()))合并,然后把合并序列插入到s中。

2.两个有序集的交.
set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(s,s.begin()));

3.两个有序集的差.
set_difference (s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(s,s.begin()));


    
[2] 用UITableViewCell兑现电子书平铺书架效果
    来源: 互联网  发布时间: 2014-02-18
用UITableViewCell实现电子书平铺书架效果
原创文章,如需转载请注明:转载自:舵手程序 http://www.helmsmansoft.com/index.php/archives/70

现阶段网上讲解的实现这种效果的文章一般都是用UIVIew 去加载UIButton实现此功能,今天给大家说一下在UITableViewCell下怎样去实现这种效果

UITableViewCell默认是列表形态,默认状态下允许加载一张图片,如果想实现在UITableViewCell中显示多行图片,可以自定义UIView,把UIView加载到Cell上即可实现这种效果。这里主要说一下怎么去写Cell里的功能,其它功能不具体解释了。

具体见代码:
在theTableViewController.h中定义UIButton *buttonArray;
在theTableViewController.m文件内定义Cell中显示的图书本数

#define theNumberOfTatleTile 3 //每行显示3本
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section //每行3本,返回的行数
{
if([self.listFileName count]%theNumberOfTatleTile == 0){ //listFileName 图书名字数组
return [self.listFileName count]/theNumberOfTatleTile;
}else{
return [self.listFileName count]/theNumberOfTatleTile+1;
}
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *theKey = @"theKey";
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; //注意此处
{

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:theKey] autorelease];

UILabel *customLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 768, 1004)];
customLabel.backgroundColor = [UIColor redColor];
buttonArray = [[NSMutableArray alloc] init];
NSUInteger row = [indexPath row];
for(int i = 0 ; i < [self.listFileName count]/theNumberOfTatleTile;i++){
NSNumber *cellRow = [[NSNumber alloc] initWithInt:theNumberOfTatleTile];
[buttonArray addObject:cellRow];
}
for(int j = 0 ; j < [self.listFileName count]%theNumberOfTatleTile; j++){
NSString *str = [NSString stringWithFormat:@"%d",[self.listFileName count]%theNumberOfTatleTile];
[buttonArray addObject:str];
}

cell.imageView.image = NULL;
cell.textLabel.text = NULL;
cell.detailTextLabel.text = NULL;
NSString *a = [buttonArray objectAtIndex:row];
NSInteger b= [a integerValue];

for(int m = 0 ; m < b; m++){

button = [[UIButton alloc] initWithFrame:CGRectMake(70+m%theNumberOfTatleTile*240, 20, 150, 200)];
UILabel *label= [[UILabel alloc] initWithFrame:CGRectMake(0, 170, 150, 30)];
[button setBackgroundImage:[UIImage imageNamed:@"apple.png"] forState:UIControlStateNormal];
label.backgroundColor = [UIColor clearColor];
label.text = [listFileName objectAtIndex:theNumberOfTatleTile*row+m];
[button addSubview:label];

button.backgroundColor = [UIColor whiteColor];
button.reversesTitleShadowWhenHighlighted = YES;
[button setTag:theNumberOfTatleTile*row+m];
[button addTarget:self action:@selector(thePicButtonPress:) forControlEvents:UIControlEventTouchUpInside];
// button.userInteractionEnabled = YES;
// [button setTitleShadowColor:[UIColor clearColor] forState:UIControlEventTouchUpInside];
// [button setTitleShadowColor:[UIColor blackColor] forState:UIControlStateNormal];
//
[cell addSubview:button];
[button release];

}
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"2.png"]];
cell.backgroundView = imgView;
cell.selectionStyle = UITableViewCellEditingStyleNone; //选中CELL后效果
return cell;

}
}

如果你喜欢本文,请去站点支持一下。分享给大家 舵手程序--http://www.helmsmansoft.com

转载本站文章请注明出处,转载自:舵手程序--http://www.helmsmansoft.com

本文链接地址: http://www.helmsmansoft.com/index.php/archives/70

    
[3] 关于onTouch跟onClick事件处理机制(转载)
    来源: 互联网  发布时间: 2014-02-18
关于onTouch和onClick事件处理机制(转载)

Button的onTouch,onClick,onLongClick事件发生先后顺序和关联:
一,onTouch返回false
首先是onTouch事件的down事件发生,此时,如果长按,触发onLongClick事件;
然后是onTouch事件的up事件发生,up完毕,最后触发onClick事件。

二,onTouch返回true
首先是onTouch事件的down事件发生,然后是onTouch事件的up事件发生;期间不触发onClick和onLongClick事件

三,onTouch:down返回true,up返回false:结果同二。
机制分析:
        onTouch事件中:down事件返回值标记此次事件是否为点击事件(返回false,是点击事件;返回true,不记为点击事件),而up事件标记此次事件结束时间,也就是判断是否为长按。
只要当down返回true时候,系统将不把本次事件记录为点击事件,也就不会触发onClick或者onLongClick事件了。因此尽管当up的时候返回false,系统也不会继续触发onClick事件了。

四,onTouch:down返回false,up返回true:
首先是onTouch事件的down事件发生,此时:
长按,触发onLongClick事件,然后是onTouch事件的up事件发生,完毕。
短按,先触发onTouch的up事件, 到一定时间后,自动触发onLongClick事件。
机制分析:
        onTouch事件中:down事件返回值标记此次事件是否为点击事件(返回false,是点击事件;返回true,不记为点击事件),而up事件标记此次事件结束时间,也就是判断是否为长按。
        当down返回false,标记此次事件为点击事件,而up返回了true,则表示此次事件一直没有结束,也就是一直长按下去了,达到长按临界时间后,自然触发长按事件,而onClick事件没有触发到。

原文:http://www.eoeandroid.com/thread-99551-1-1.html


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3