GVKun编程网logo

STL--vector学习笔记(stl vector)

21

对于STL--vector学习笔记感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解stlvector,并且为您提供关于5.7(java学习笔记)Vector、Enumeration、Acti

对于STL--vector学习笔记感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解stl vector,并且为您提供关于5.7(java学习笔记)Vector、Enumeration、Active Record 迁移 学习笔记、Angular input decorator学习笔记、BroadcastReceiver学习笔记的宝贵知识。

本文目录一览:

STL--vector学习笔记(stl vector)

STL--vector学习笔记(stl vector)

<Vector>

vector<T>容器是包含T类型元素的序列容器,vector<T>容器的大小可以自动增长,从而可以包含任意数量的元素,只要元素超出vector当前的容量,就会自动分配更多的空间。

只能在vector容器尾部高效的删除或添加元素。可以方便灵活的代替数组存放元素。只要能够意识到,vector在扩展容量,以及在序列内部删除或添加元素时会产生一些开销;

但大多数情况下,代码不会明显变慢。

 

使用vector容器模板,需要在头文件用vector  #include<vector>

 

1.初始化:

vector<int>a;                  //声明一个int型变量a
(容器中没有元素,所以没有分配空间,当添加第一个数据项时,会自动分配内存)

vector<int>a(5);                //声明一个初始大小为5的向量
vector<int>a(5,1);                //声明一个初始大小为5且初始值都为1的向量
vector<int>b(a);                 //声明并用向量a初始化向量b
Vector<int>b(a.begin(),a.begin()+3);//将a向量中从第0个到第二个(共三个)作为向量b的初始值
(1.vector<int>value(20)中的20表示元素个数,及容器开始时有20个元素,他们默认值为0.
2.vector<int>value{20}表示只有一个元素,并以20作为初始值)
可以直接使用数组来初始化向量
Int=n[]={1,2,3,4,5};
vector<int>a(n,n+5);            //将数组n的前五个元素作为向量a的初始值
vector<int>a(&n[1],&n[4]);     //将n[1]--n[4]范围的元素作为向量a的初始值

 

2、访问元素

vector的元素访问可以像操作普通数组一般:

vector<int>value{1,2,3,4,5};

通过下标访问:cout<<value[0]<<’ ‘<<value[1]<<endl;(vector的索引从0开始和标准数组一样)

vector的成员函数front(),back()分别返回序列中的第一个和最后一个元素的引用

  成员函数data()返回第一个指向数组的指针,他在内部被用来存储元素

auto p=value.data(); pint*类型,一般来说data()返回vector<T>容器的T*类型的值。

Cout<<*p<<’ ‘<<*(p+1)<<endl; //输出 1 2

 

3、添加元素

push_back();在序列的尾端添加一个元素

例:

vector<int>value;  

value.push_back(3.14);

emplace_back();

4、迭代器

//使用迭代器访问元素.
Vector<int>vec;
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;

5、成员函数

Vector<int>vec;
vec.begin()            //指向迭代器中第一个元素。   
vec.end()                //指向迭代器中末端元素的下一个,指向一个不存在元素。          
vec.push_back(elem)         //在尾部加入一个数据。  
vec.pop_back()          //删除最后一个数据。  
vec.capacity()      //vector可用空间的大小。  
vec.size()    //返回容器中数据个数。  
vec.empty()     //判断容器是否为空。  
vec.front()     //传回第一个数据。  
vec.back()      //传回最后一个数据,不检查这个数据是否存在。  
vec.at(index)   //传回索引idx所指的数据,如果idx越界,抛出out_of_range。  
vec.clear()     //移除容器中所有数据。  
vec.erase(iterator)   //删除pos位置的数据,传回下一个数据的位置。  
vec.erase(begin,end)    //删除[beg,end)区间的数据,传回下一个数据的位置。注意:begin和end为iterator  
vec.insert(position,elem)   //在pos位置插入一个elem拷贝,传回新数据位置。  
vec.insert(position,n,elem) //在pos位置插入n个elem数据,无返回值。  
vec.insert(position,begin,end)  //在pos位置插入在[beg,end)区间的数据,无返回值。                         

 

 

 

5.7(java学习笔记)Vector、Enumeration

5.7(java学习笔记)Vector、Enumeration

一.Vector

Vector类实现一个可扩展的数组对象。与数组一样,它包含可以使用整数索引访问。

它的基本操作方法add(int index, E element),get(int index),indexOf(Object o)等操作方法

与数组中的方法类似这里就不叙述了。

 

我们主要看一个方法:Enumeration<E> elements(),返回一个Enumeration接口类型。

 

二、Enumeration

Enumeration类型Iterator,这不过这个是比较古老的迭代器主要出现在jdk1.5之前.

Enumeration中只有两个方法:

 

 hasMoreElements()用于判断该集合是否还有元素。

nexElement()返回下一个元素。

 

我们结合这两个来看下例子:

 

import java.util.Enumeration;
import java.util.Vector;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Vector<String> v = new Vector<>();
        v.add("1");
        v.add("2");
        v.add("3");
        Enumeration <String>enu = v.elements();
        while(enu.hasMoreElements()){
            System.out.println(enu.nextElement());
        }
    }
}
运行结果:
1
2
3

 

我们来看一个实现了Enumeration接口的子类StringTokenizer

首先这个子类实现了Enumeration接口,就可以迭代输出元素。

它的作用类似字符串中split,可以用于分割字符。

 

import java.util.Enumeration;
import java.util.StringTokenizer;
import java.util.Vector;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String com = "google.com;baidu.com;bing.com";
        StringTokenizer enu = new StringTokenizer(com,";");//指定分隔符为";",被分割字符串为com
        while(enu.hasMoreElements()){                      //只传字符串默认分割符为空格
            System.out.println(enu.nextElement());
        }
    }
}
import java.util.Enumeration;
import java.util.StringTokenizer;
import java.util.Vector;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String com = "google.com;baidu.com;bing.com";
        StringTokenizer enu = new StringTokenizer(com,";");
        while(enu.hasMoreElements()){
            System.out.println(enu.nextElement());
        }
    }
}
运行结果:
google.com baidu.com bing.com

对于这些我们只需了解即可,在遇到比较古老的项目的时候,里面可能会出现这些。

Active Record 迁移 学习笔记

Active Record 迁移 学习笔记

Chage 方法是最常使用的方法 

▪ add_column

▪ add_foreign_key

▪ add_index

▪ add_reference

▪ add_timestamps

▪ change_column_default(必须提供 :from 和 :to 选项)

▪ change_column_null

▪ create_join_table

▪ create_table

▪ disable_extension

▪ drop_join_table

▪ drop_table(必须提供块)

▪ enable_extension

▪ remove_column(必须提供字段类型)

▪ remove_foreign_key(必须提供第二个数据表)

▪ remove_index

▪ remove_reference

▪ remove_timestamps

▪ rename_column

▪ rename_index

▪ rename_table

Angular input decorator学习笔记

Angular input decorator学习笔记

https://angular.io/api/core/Input

Input decorator只能用在Angular class字段里, 用于指定元数据,将class字段指定成input property.

Decorator that marks a class field as an input property and supplies configuration metadata. The input property is bound to a DOM property in the template. During change detection, Angular automatically updates the data property with the DOM property’s value.

参数名称:The name of the DOM property to which the input property is bound.

看个例子:


看个例子:

@Component({
  selector: ''bank-account'',
  template: `
    Bank Name: {{bankName}}
    Account Id: {{id}}
  `
})
class BankAccount {
  // This property is bound using its original name.
  @Input() bankName: string;
  // this property value is bound to a different property name
  // when this component is instantiated in a template.
  @Input(''account-id'') id: string;

  // this property is not bound, and is not automatically updated by Angular
  normalizedBankName: string;
}

@Component({
  selector: ''app'',
  template: `
    <bank-account bankName="RBC" account-id="4747"></bank-account>
  `
})
class App {}

子组件的模板里,显示bankName和id两个模型字段。

这两个字段,加上了@Input装饰器,表明其数据源,需要外部消费者传入(通常是消费这个子组件的父组件)

父组件的传值方式:

测试截图:

加了中括号后,表明等号右边的是一个表达式,不能当成普通字符串对待。


做个实验,如果删除子Component里的@Input:

最后什么也无法显示出来:


更多Jerry的原创文章,尽在:“汪子熙”:

本文同步分享在 博客“汪子熙”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

BroadcastReceiver学习笔记

BroadcastReceiver学习笔记

BroadcastReceiver 注册过程

BroadcastReceiver 注册的过程大致如下图所示:

           +----------------+      +-------------+       +-------------------------+    +------------------------+
           | ContextWrapper |      | ContextImpl |       | LoadedApk(mPackageInfo) |    | ActivityManagerService |
           +-----+----------+      +------+------+       +------------+------------+    +---------------+--------+
                 |                        |                           |                                 |         
                 |                        |                           |                                 |         
 registerReceiver|                        |                           |                                 |         
                 |                        |                           |                                 |         
 +--------------->                        |                           |                                 |         
                 |        registerReceiver|                           |                                 |         
                 |                        |                           |                                 |         
                 +------------------------>                           |                                 |         
                 |                        |    getReceiverDispatcher  |                                 |         
                 |                        |                           |                                 |         
                 |                        +--------------------------->                                 |         
                 |                        |                           |                                 |         
                 |                        |      [IIntentReceiver]    |                                 |         
                 |                        |                           |                                 |         
                 |                        <---------------------------+                registerReceiver |         
                 |                        |                           |                                 |         
                 |                        +------------------------------------------------------------->         
                 |                        |                           |                                 |         
                 |                        |                           |                                 |         
                 v                        v                           v                                 v         
  1. 调用ContextWrapper的registerReceiver方法,然后传入receiver实例和filter实例。

  2. 调用ContextImpl的registerReceiverInternal方法, 由LoadedApk类将context、receiver、scheduler(receiver所在进程的handler)等包装成ReceiverDispatcher类。并将其内部类IIntentReceiver返回,传给ActivityManagerService进行注册。

LoadeApk中与BroadcastReceiver注册相关的类结构图如下所示:

                                                                                                              
  +-------------------------------------------------------------+                                                 
  |  LoadedApk                                                  |                                                 
  |                                                             |                                                 
  |     +-------------------+                                   |                                                 
  |     | mReceivers        |        +-----------------------+  |                                                 
  |     +-------------------+        | receiver1->dispatcher |  |                                                 
  |     |  context(Activity)+-------->                       |  |                                                 
  |     |                   |        | receiver2->dispatcher |  |                                                 
  |     |  context          |        |                       |  |                                                 
  |     |                   |        | receiver3->dispatcher |  |                                                 
  |     |  context          |        |                       |  |                                                 
  |     |                   |        |    ...                |  |                                                 
  |     |   ...             |        +-----------------------+  |                                                 
  |     +-------------------+                                   |                                                 
  |                                                             |                                                 
  |                                                             |                                                 
  +-------------------------------------------------------------+                                                 
                                                                                                              

LoadedApk中保存着context与其注册的各个receiver的对应关系,同时也保存着每个receiver与其dispatcher的对应关系。
dispatcher中的IIntentReceiver是与ActivityManagerService沟通的桥梁。其内部结构如下图所示:

+--------------------------------------------------+                                                      
| ReceiverDispatcher                               |                                                      
|   +-------------------------------------------+  |                                                      
|   | InnerReceiver extends IIntentReceiver.Stub|  |                                                      
|   +-------------------------------------------+  |                                                      
|                                                  |                                                      
|   BroadcastReceiver mReceiver;                   |                                                      
|   Context mContext;                              |                                                      
|   Handler mActivityThread;                       |                                                      
|                                                  |                                                      
+--------------------------------------------------+                                                      

ActivityManagerService在其registerReceiver方法中,将传入的IIntentReceiver和filter以及caller保存成如下所示的结构:

+---------------------------------------------------------------------------+                                     
|                                                                           |                                     
|  ActivityManagerService                                                   |                                     
|                                                   +---------------------+ |                                     
|                                                   | ReceiverList        | |                                     
|                                  +-------------+  +---------------------+ |                                     
|                               +-->InnerReceiver+-->    BroadcastFilter1 | |                                     
|      +---------------------+  |  +-------------+  |                     | |                                     
|      | mRegisteredReceivers+--+                   |    BroadcastFilter2 | |                                     
|      +---------------------+  |                   |                     | |                                     
|                               |  +-------------+  |        ...          | |                                     
|                               +-->InnerReceiver|  +---------------------+ |                                     
|                               |  +-------------+                          |                                     
|                               |                                           |                                     
|                               |                                           |                                     
|                               +-->    ...                                 |                                     
|                                                                           |                                     
|                                                                           |                                     
|                             +------------------+                          |                                     
|     +-------------------+   | BroadcastFilter1 |                          |                                     
|     | mReceiverResolver +--->                  |                          |                                     
|     +-------------------+   | BroadcastFilter2 |                          |                                     
|                             |                  |                          |                                     
|                             |     ...          |                          |                                     
|                             +------------------+                          |                                     
|                                                                           |                                     
+---------------------------------------------------------------------------+                                     

保存成这种结构的原因是为后面发送Broadcast提供高效的实现。

Broadcast 发送过程

今天关于STL--vector学习笔记stl vector的分享就到这里,希望大家有所收获,若想了解更多关于5.7(java学习笔记)Vector、Enumeration、Active Record 迁移 学习笔记、Angular input decorator学习笔记、BroadcastReceiver学习笔记等相关知识,可以在本站进行查询。

本文标签: