1. bits/stdc++.h 标准库头文件
2. ofstream fout() 文件输出流对象
ofstream(const char *filename,openmode mode);
ofstream fout("/temp/results.txt",ios::app); 将输出流对象中的内容追加到指定的文件当中
指定的模式
ios::app 添加输出 追加
ios::ate 当已打开时寻找到EOF
ios::binary 以二进制模式打开文件
ios::in 为读取打开文件
ios::out 为写入打开文件
ios::trunc 覆盖存在的文件
3. getenv("OUTPUT_PATH") 获取文件路径 括号中的参数为环境变量
#include
char * getenv(const char *name)
返回环境变量name的值 依赖执行的情况 如果没有对应的环境变量name 则会返回null
4. stoi() string to int 字符串转换为int类型
5. string.erase() 清除
iterator erase(iterator pos); 删除指定位置的字符 返回执行下一个字符的迭代器。
iterator erase(iterator start,iterator end); 删除迭代器区间包括的字符 返回一个指向被删除的最后一个字符的下一个位置的迭代器。
basic_string & erase(size_type index=0,size_type num=npos); 从index索引处开始的num个字符 返回*this 指针。
不带任何参数 则删除所有字符
string s("So, you like donuts, eh? Well, have all the donuts in the world!");
cout << "The original string is '" << s << "'" << endl;
s.erase( 50, 14 ); //index num
cout << "Now the string is '" << s << "'" << endl;
s.erase( 24 ); //24之后的所有
cout << "Now the string is '" << s << "'" << endl;
s.erase();
cout << "Now the string is '" << s << "'" << endl; //删除所有字符
6. string.rbegin() 逆向迭代器 右侧开始
string.rend()
reverse_iterator rbegin(); 函数返回指向当前vector末尾的逆向迭代器 实际指向末尾的下一位置
1 vector v(10,20,30,40);
2 vector::reverse_iterator it=v.rbegin();//逆向迭代器 rend 类似
3 cout<<*it<
7. not1()
template
1 template unary_negate not1 (const Predicate& pred)
2 {
3 return unary_negate(pred);
4 }
// not1 example
#include // std::cout
#include // std::not1
#include // std::count_if
struct IsOdd {
bool operator() (const int& x) const {return x%2==1;}
typedef int argument_type;
};
int main () {
int values[] = {1,2,3,4,5};
int cx = std::count_if (values, values+5, std::not1(IsOdd()));
std::cout << "There are " << cx << " elements with even values.\n";
return 0;
}
8. string.substr()
basic_string substr(size_type index,size_type num=npos);
返回本字符串的一个子串,从index开始 长度为num个字符 ,如果未指定 则返回index开始的剩余的所有字符
1 string s("What we have here is a failure to communicate");
2
3 string sub = s.substr(21);
4
5 cout << "The original string is " << s << endl;
6 cout << "The substring is " << sub << endl;
9.find()
1 size_type find(const basic_string &str,size_type index);
2 size_type find(const char *str,size_type index);
3 size_type find(const char *str,size_type index,size_type length);
4 size_type find(char ch,size_type index);
返回str在字符串中第一次出现的位置 从index开始查找,如果没找到则返回string::npos
返回str在字符串中第一次出现的位置 从index开始查找 长度为length 如果没找到就返回 string::npos
返回字符ch在字符串中第一次出现的位置 从index开始查找 如果没找到就返回string::npos
1 string str1("alpah beta gamma delta");
2 unsigned int loc=str1.find("omega",0);
3 if(loc!=string::npos)
4 cout<<"Found Omega at"<
10.find_if()
template
InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred);
等价于
1 template
2 InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred)
3 {
4 while (first!=last) {
5 if (pred(*first)) return first;
6 ++first;
7 }
8 return last;
9 }
举例:
1 // find_if example
2 #include // std::cout
3 #include // std::find_if
4 #include // std::vector
5
6 bool IsOdd (int i) {
7 return ((i%2)==1);
8 }
9
10 int main () {
11 std::vector myvector;
12
13 myvector.push_back(10);
14 myvector.push_back(25);
15 myvector.push_back(40);
16 myvector.push_back(55);
17
18 std::vector::iterator it = std::find_if (myvector.begin(), myvector.end(), IsOdd);
19 std::cout << "The first odd value is " << *it << '\n';
20
21 return 0;
22 }
11.std::ptr_fun
1 template
2 pointer_to_unary_function ptr_fun (Result (*f)(Arg));
3
4 template
5 pointer_to_binary_function ptr_fun (Result (*f)(Arg1,Arg2));
完整代码:
#include
using namespace std;
string ltrim(const string &);
string rtrim(const string &);
vector split(const string &);
// Complete the compareTriplets function below.
vector compareTriplets(vector a, vector b) {
vector s{0,0};
for(vector::size_type index=0;index<3;index++)
{
if(a[index]>b[index])
s[0]+=1;
else if(a[index] a_temp = split(rtrim(a_temp_temp));
vector a(3);
for (int i = 0; i < 3; i++) {
int a_item = stoi(a_temp[i]);
a[i] = a_item;
}
string b_temp_temp;
getline(cin, b_temp_temp);
vector b_temp = split(rtrim(b_temp_temp));
vector b(3);
for (int i = 0; i < 3; i++) {
int b_item = stoi(b_temp[i]);
b[i] = b_item;
}
vector result = compareTriplets(a, b);
for (int i = 0; i < result.size(); i++) {
fout << result[i];
if (i != result.size() - 1) {
fout << " ";
}
}
fout << "\n";
fout.close();
return 0;
}
string ltrim(const string &str) {
string s(str);
s.erase(
s.begin(),
find_if(s.begin(), s.end(), not1(ptr_fun(isspace)))
);
return s;
}
string rtrim(const string &str) {
string s(str);
s.erase(
find_if(s.rbegin(), s.rend(), not1(ptr_fun(isspace))).base(),
s.end()
);
return s;
}
vector split(const string &str) {
vector tokens;
string::size_type start = 0;
string::size_type end = 0;
while ((end = str.find(" ", start)) != string::npos) {
tokens.push_back(str.substr(start, end - start));
start = end + 1;
}
tokens.push_back(str.substr(start));
return tokens;
}