美文网首页
c++primer 9.35-9.52

c++primer 9.35-9.52

作者: 青吟乐 | 来源:发表于2019-05-09 22:57 被阅读0次

9.35
capacity是探测容器极限大小
size是探测容器现在的大小
9.36
不可能
9.37
链表没有长度,array固定长度
9.38

#include <iostream>
#include<vector>
using namespace std;

int main()
{
    vector<int > vec;
    for(int i=0;i<100;i++){
        vec.push_back(i);
        cout<<"vector的实际大小为:"<<vec.size()
        <<"vector申请的大小为:"<<vec.capacity()<<endl;
    }
    return 0;
}

实际申请空间按照二进制的方式增长
输出:
ector的实际大小为:1vector申请的大小为:1
vector的实际大小为:2vector申请的大小为:2
vector的实际大小为:3vector申请的大小为:4
vector的实际大小为:4vector申请的大小为:4
vector的实际大小为:5vector申请的大小为:8
vector的实际大小为:6vector申请的大小为:8
vector的实际大小为:7vector申请的大小为:8
vector的实际大小为:8vector申请的大小为:8
vector的实际大小为:9vector申请的大小为:16
vector的实际大小为:10vector申请的大小为:16
vector的实际大小为:11vector申请的大小为:16
vector的实际大小为:12vector申请的大小为:16
vector的实际大小为:13vector申请的大小为:16
vector的实际大小为:14vector申请的大小为:16
vector的实际大小为:15vector申请的大小为:16
vector的实际大小为:16vector申请的大小为:16
vector的实际大小为:17vector申请的大小为:32
vector的实际大小为:18vector申请的大小为:32
vector的实际大小为:19vector申请的大小为:32
vector的实际大小为:20vector申请的大小为:32
vector的实际大小为:21vector申请的大小为:32
vector的实际大小为:22vector申请的大小为:32
vector的实际大小为:23vector申请的大小为:32
vector的实际大小为:24vector申请的大小为:32
vector的实际大小为:25vector申请的大小为:32
vector的实际大小为:26vector申请的大小为:32
vector的实际大小为:27vector申请的大小为:32
vector的实际大小为:28vector申请的大小为:32
vector的实际大小为:29vector申请的大小为:32
vector的实际大小为:30vector申请的大小为:32
vector的实际大小为:31vector申请的大小为:32
vector的实际大小为:32vector申请的大小为:32
vector的实际大小为:33vector申请的大小为:64
vector的实际大小为:34vector申请的大小为:64
vector的实际大小为:35vector申请的大小为:64
vector的实际大小为:36vector申请的大小为:64
vector的实际大小为:37vector申请的大小为:64
vector的实际大小为:38vector申请的大小为:64
vector的实际大小为:39vector申请的大小为:64
vector的实际大小为:40vector申请的大小为:64
vector的实际大小为:41vector申请的大小为:64
vector的实际大小为:42vector申请的大小为:64
vector的实际大小为:43vector申请的大小为:64
vector的实际大小为:44vector申请的大小为:64
vector的实际大小为:45vector申请的大小为:64
vector的实际大小为:46vector申请的大小为:64
vector的实际大小为:47vector申请的大小为:64
vector的实际大小为:48vector申请的大小为:64
vector的实际大小为:49vector申请的大小为:64
vector的实际大小为:50vector申请的大小为:64
vector的实际大小为:51vector申请的大小为:64
vector的实际大小为:52vector申请的大小为:64
vector的实际大小为:53vector申请的大小为:64
vector的实际大小为:54vector申请的大小为:64
vector的实际大小为:55vector申请的大小为:64
vector的实际大小为:56vector申请的大小为:64
vector的实际大小为:57vector申请的大小为:64
vector的实际大小为:58vector申请的大小为:64
vector的实际大小为:59vector申请的大小为:64
vector的实际大小为:60vector申请的大小为:64
vector的实际大小为:61vector申请的大小为:64
vector的实际大小为:62vector申请的大小为:64
vector的实际大小为:63vector申请的大小为:64
vector的实际大小为:64vector申请的大小为:64
vector的实际大小为:65vector申请的大小为:128
vector的实际大小为:66vector申请的大小为:128
vector的实际大小为:67vector申请的大小为:128
vector的实际大小为:68vector申请的大小为:128
vector的实际大小为:69vector申请的大小为:128
vector的实际大小为:70vector申请的大小为:128
vector的实际大小为:71vector申请的大小为:128
vector的实际大小为:72vector申请的大小为:128
vector的实际大小为:73vector申请的大小为:128
vector的实际大小为:74vector申请的大小为:128
vector的实际大小为:75vector申请的大小为:128
vector的实际大小为:76vector申请的大小为:128
vector的实际大小为:77vector申请的大小为:128
vector的实际大小为:78vector申请的大小为:128
vector的实际大小为:79vector申请的大小为:128
vector的实际大小为:80vector申请的大小为:128
vector的实际大小为:81vector申请的大小为:128
vector的实际大小为:82vector申请的大小为:128
vector的实际大小为:83vector申请的大小为:128
vector的实际大小为:84vector申请的大小为:128
vector的实际大小为:85vector申请的大小为:128
vector的实际大小为:86vector申请的大小为:128
vector的实际大小为:87vector申请的大小为:128
vector的实际大小为:88vector申请的大小为:128
vector的实际大小为:89vector申请的大小为:128
vector的实际大小为:90vector申请的大小为:128
vector的实际大小为:91vector申请的大小为:128
vector的实际大小为:92vector申请的大小为:128
vector的实际大小为:93vector申请的大小为:128
vector的实际大小为:94vector申请的大小为:128
vector的实际大小为:95vector申请的大小为:128
vector的实际大小为:96vector申请的大小为:128
vector的实际大小为:97vector申请的大小为:128
vector的实际大小为:98vector申请的大小为:128
vector的实际大小为:99vector申请的大小为:128
vector的实际大小为:100vector申请的大小为:128

9.39
容器刚开始设定为1024个元素长(每个元素值初始化)
从标准输入中依次输入到vector中
输入完成后容器以1.5倍长度增长
9.40
256个和512个容器进行resize后的capacity还是1024
1000个和1048个容器进行resize后的capacity因为resize超过了capacity所以不要看容器具体的实现

9.41

#include <iostream>
#include<vector>
#include<string>
using namespace std;

int main()
{
    vector<char> vec={'h','e','l','l','o','p'};
    //用string的构造函数,使用vector的首位迭代器作为参数
    string str(vec.cbegin(),vec.cend());
    cout<<str<<endl;

    return 0;
}

9.42
使用前一小节学的reserve(n)方法,c.reserve(100)。
9.43

 #include <iostream>
#include<vector>
#include<string>
using namespace std;

void replace(string &s,const string &oldVal,const string &newVal){
    auto iter = s.begin();
    while(iter!=s.end()-oldVal.size()){//iter循环到最后不能放开oldVal的位置
        if(oldVal==string(iter,iter+oldVal.size())){
            //擦除oldVal,参数范围为oldVal在s中的迭代器范围
            s.erase(iter,iter+oldVal.size());
            //插入newVal,参数范围为newVal的首尾迭代器
            s.insert(iter,newVal.begin(),newVal.end());
            //成功插入则跳过newVal的范围
            iter+=newVal.size();
        }
        iter++;
    }
}
int main()
{
    string s="some thing";
    string s1="me",s2="xx";
    replace(s,s1,s2);
    cout<<s<<endl;
    return 0;
}

9.44
重写上

#include <iostream>
#include<vector>
#include<string>
using namespace std;

void replace1(string &s,const string &oldVal,const string &newVal){
    for(int  u=0;u<=s.size()-oldVal.size();){
        if(s[u]==oldVal[0]&&s.substr(u,oldVal.size())==oldVal){
            s.replace(u,oldVal.size(),newVal);
            u+=newVal.size();
        }else{
            u++;
        }
    }
}


int main()
{
    string s="some thimeng";
    string s1="me",s2="xx";
    replace1(s,s1,s2);
    cout<<s<<endl;
    return 0;
}

9.45

#include <iostream>
#include<vector>
#include<string>
using namespace std;

void attention(string &s,const string &s1,const string &s2){
    s.insert(s.begin(),s1.begin(),s1.end());
    s.append(s2);
}


int main()
{
    string s="some thimeng";
    string s1="me",s2="xx";
    attention(s,s1,s2);
    cout<<s<<endl;

    return 0;
}

9.46
9.45的

    s.insert(s.begin(),s1.begin(),s1.end());
    s.append(s2);

改成

    s.insert(s.begin(),s1.begin(),s1.end());
    s.insert(s.end(),s2.begin(),s2.end());

即可
9.47

int main()
{
    string str1("ab2c3d7R4E6");
    string str2("0123456789");
    cout << "每个数字字符: ";
    for(int i=0;(i = str1.find_first_of(str2, i)) != string::npos;i++){
        cout<<str1[i]<<" ";
    }
    cout<<endl;
    cout << "每个字母字符: ";
    for(int i=0;(i = str1.find_first_not_of(str2,i) )!= string::npos;i++){
        cout<<str1[i]<<" ";
    }
    cout<<endl;
}

9.48
因为numbers中没有完整的name字符串
所以返回npos
9.49


#include <iostream>
#include<vector>
#include<string>
#include<fstream>
using namespace std;

int main(int argc, char**argv)
{

    //上下不出头字母
    string s = "acenmorsuvwxz";
    //ifstream infile(argv[1]);

    int max=0;//最大长度
    ifstream infile("C:\\study\\c++test\\endless.txt");
    string str;
    while(infile>>str)//单词文件读入str
    {
    cout<<"原字符串为:"<<str<<endl;
    unsigned pos1 = 0;//指明第一个不出头字符位置
    unsigned pos2 = 0;//指明第一个出头左字符位置
    unsigned _legenth = 0;//记录不出头位置到出头位置的长度
    unsigned pos3 = 0;//指明下一个pos1开始的位置

    while((pos1 = str.find_first_of(s,pos1)) != string::npos)//找到第一个不出头字符
    {
        pos2 = pos1;//此时pos2为第一个不出头字母
        //从第一个不出头字符开始找到第一个出头字符
        if ((pos2 = str.find_first_not_of(s,pos2)) != string::npos)
        {
            if (pos2 - pos1 >= _legenth)
             //找出最大长度并记录此区间的首位置
            {
                _legenth = pos2 - pos1;
                if(_legenth>max){
                        max=_legenth;
                }
                pos3 = pos1;
            }
        string _string = str.substr(pos3,_legenth);
        cout<<"不出头串:"<<_string<<endl;
        }

        pos1=pos2;
    }

    }
    cout<<"最大串的长度为:"<<max<<endl;

    return 0;
}

9.50

//求int型的和
int sum1(vector<string>& vec){
    int sum = 0;
    for(auto vi:vec){
        sum+=stoi(vi);
    }
    return sum;
}
//求double型的和
double sum2(vector<string>& vec){
    double sum = 0;
    for(auto vi:vec){
        sum+=stof(vi);
    }
    return sum;
}

9.51


相关文章

网友评论

      本文标题:c++primer 9.35-9.52

      本文链接:https://www.haomeiwen.com/subject/ttwgoqtx.html