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;
}