STL复习补充

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Legends_Never_Die/article/details/86103341

1、关于vector的resize与reverse

resize(m)
若m<vector容量,则将size变为m,容器元素及capacity不变;否则,不但size变为m,capacity也将改变,大小不一定,但大于等于size,在原有容器元素后补0

    vector<int>v;
    v.resize(5);  //size==capacity==5
	
    vector<int>v(3,1);
    v.resize(5);  //size==5,capacity==6  ,容器元素:11100

reverse(m)
若m<vector容量,size,capacity不做任何改变;否则,capacity变为m,size不变

2、

ostream& operator<<(ostream&os,const f&a1) //如果是f&a1,则必须加const,否则报错;或者直接f a1;
{
     os<<a1.a<<" "<<a1.b;
     return os;
}

3、

template<int T>  //参数不一定必须是类型
class A
{
public:
    int a;
public:
    A(){a=T;}

};
int main()
{
    A<5>k;
    cout<<k.a<<endl;
   return 0;
}

4、

void f1(const pair<int,int>&p)  //不加const会报错
{
    cout<<p.first<<" "<<p.second<<endl;
}
int main()
{;
    map<int,int>m;
    m.insert(pair<int,int>(1,2));
     m.insert(pair<int,int>(3,2));
      m.insert(pair<int,int>(-1,2));
    for_each(m.begin(),m.end(),ptr_fun(f1));
   return 0;
}

5、C++中成员变量如果不加权限修饰符,则默认私有

6、

class A
{
private:
    vector<int>v;
public:
    A(int*a,int*b):v(a,b){}
    void display()
    {
        copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
    }
};
int main()
{
    int a[]={1,2,3,4};
    vector<int>b(4);
    A k(a,a+4);
    k.display();  //1 2 3 4
   return 0;
}

7、

class A
{

    int a;
    int b;
public:
    A(int a,int b):a(a),b(b){};
    bool operator==(int k)
    {
        return a==k;
    }
    friend ostream& operator<<(ostream&os,const A&k);
};
ostream& operator<<(ostream&os,const A&k)  //只能在全局定义
{
    return cout<<k.a<<" "<<k.b; //再外面引用私有变量,必须将该函数声明为该类的友元函数
}
int main()
{
    vector<A>v;
    v.push_back(A(1,2));
    v.push_back(A(-1,2));
    v.push_back(A(10,2));
    v.push_back(A(-1,2));
    vector<A>::iterator it=v.begin();
    while((it=find(it,v.end(),-1))!=v.end())
    {
        cout<<*it<<endl;
        it++;
    }
   return 0;
}

猜你喜欢

转载自blog.csdn.net/Legends_Never_Die/article/details/86103341