C++ primer 3.3vector练习 vscode

练习3.16

#include <iostream>
#include <string>
#include <vector>
using namespace std;
//#include <windows.h>

int main()
{
   vector<string> v6(10,"hi");
   for(auto v:v6)
       cout<< v << " ";

   return 0;
}

练习3.17

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    vector<string> v17;
    string word;
    while(cin>>word){ //结束循环ctrl+z
    
    for(auto &c:word){
        c = toupper(c);//toupper针对字符 不是string
    }
    v17.push_back(word);
    cout << word << endl;
    }

    return 0;
}

遇到些问题,记录下。

没有与参数列表匹配的 重载函数 “toupper” 实例

第一遍跑,结果出现

没有与参数列表匹配的 重载函数 "toupper" 实例 -- 参数类型为: (std::__cxx11::s...

的错误。
虚假的解决办法:本人没有反省函数编写问题,反而主观认为是g++版本不够新的问题。
于是开始下载新版的minGW,更新g++的版本,于是有了后续问题的发生。

真实的解决办法:以为toupper是处理string的函数(实际上是针对string中的字符的),参数类型有误才导致错误的发生。

ld returned 1 exit status

更新版本(见链接),整完环境变量之后,迟迟无法编译成功,一直返回:

[Error] ld returned 1 exit status

最后发现,出现错误的原因是更新环境变量后没有重启机器
这个错误值得铭记,很有迷惑性。

Thread 1 hit Breakpoint 1

设置完毕后,运行程序,出现:

Thread 1 hit Breakpoint 1

的告警信息实际上的意思是触发断点,在这个小代码段里是遇到(cin<<xx)了,cpp在等待输入。我错误的以为程序内被加入了隐形断点,也忙活了一会儿~

练习3.18

不合法。

ivec.push_back(42);
//或者
vector<int> ivec{0};
ivec[0] = 42;

练习3.19

vector<int> iv19(10,42); //最好
vector<int> iv19_1{42,42,42,42,42,42,42,42,42,42};
vector<int> iv19_2={42,42,42,42,42,42,42,42,42,42};

练习3.20

3.20.0

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
   vector<int> iv20;
   int inum;
   while(cin>>inum){ //结束循环ctrl+z
   
   iv20.push_back(inum);
   //cout << inum << endl;
   }
   for (decltype(iv20.size()) i = 0; i < iv20.size() - 1; i++){  //-1为了不溢出
       cout << (iv20[i] + iv20[i + 1]) << endl;
   }
   return 0;
}

3.20.1

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
  vector<int> iv20;
  int inum;

  while(cin >> inum){ //结束循环ctrl+z
  iv20.push_back(inum);
  }

  for (decltype(iv20.size()) i = 0; i < iv20.size() /2; i++){  //-1为了不溢出
      cout << (iv20[i] + iv20[iv20.size()-i-1]) << endl; //-i-1同样防止溢出 (以i=0为例)
  }
  return 0;
}

练习3.21


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

void check(vector<int> &v){
    if (v.empty()){
        cout << "Empty."<< endl;
}
    else{
        for(auto it = v.begin(); it != v.end();++it){
            cout << *it<< endl;
        }
    }
}
void check(vector<string> &v){
    if (v.empty()){
        cout << "Empty."<< endl;
}
    else{
        for(auto it = v.begin(); it != v.end();++it){
            if (it->empty()){ //等同于(*it).empty()
                cout << "(null)"<< ',';
            }
            else cout << *it<< endl;
        }
    }
}
int main()
{
    vector<int> v1;
    vector<int> v2(10);
    vector<int> v3(10, 42);
    vector<int> v4{10};
    vector<int> v5{10, 42};
    vector<string> v6{10};
    vector<string> v7{10, "hi"};

    check(v1);
    check(v2);
    check(v3);
    check(v4);
    check(v5);
    check(v6);
    check(v7);

    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值