Compare the Triplets

Compare the Triplets

 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  <stdlib.h>  

  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<int> v(10,20,30,40);
2 vector<int>::reverse_iterator it=v.rbegin();//逆向迭代器    rend   类似
3 cout<<*it<<endl;      返回40
4 cout<<*(it++)<<endl;    返回30    注意是逆向    

 

7.  not1()

   template <class Predicate> unary_negate<Predicate> not1 (const Predicate& pred);

  

1 template <class Predicate> unary_negate<Predicate> not1 (const Predicate& pred)
2 {
3   return unary_negate<Predicate>(pred);
4 }
// not1 example
#include <iostream>     // std::cout
#include <functional>   // std::not1
#include <algorithm>    // 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"<<loc<<endl;
5 else
6     cout<<"didn't find omega"<<endl;

 

10.find_if()

  function template <algorithm>

std::find_if

template <class InputIterator, class UnaryPredicate>
   InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred);

等价于

1 template<class InputIterator, class UnaryPredicate>
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 <iostream>     // std::cout
 3 #include <algorithm>    // std::find_if
 4 #include <vector>       // std::vector
 5 
 6 bool IsOdd (int i) {
 7   return ((i%2)==1);
 8 }
 9 
10 int main () {
11   std::vector<int> 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<int>::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 <class Arg, class Result>
2 pointer_to_unary_function<Arg,Result> ptr_fun (Result (*f)(Arg));
3 
4 template <class Arg1, class Arg2, class Result>
5 pointer_to_binary_function<Arg1,Arg2,Result> ptr_fun (Result (*f)(Arg1,Arg2));

 

 

 

 

 

完整代码:

 

#include <bits/stdc++.h>

using namespace std;

string ltrim(const string &);
string rtrim(const string &);
vector<string> split(const string &);

// Complete the compareTriplets function below.
vector<int> compareTriplets(vector<int> a, vector<int> b) {
    vector<int> s{0,0};


        for(vector<int>::size_type index=0;index<3;index++)
        {
            if(a[index]>b[index])
                s[0]+=1;
            else if(a[index]<b[index])
                s[1]+=1;
            else continue;     //没有此代码也可
        }
      for(auto i:s)
       cout<<i<<endl;
    return s;

}

int main()
{
    ofstream fout(getenv("OUTPUT_PATH"));

    string a_temp_temp;
    getline(cin, a_temp_temp);

    vector<string> a_temp = split(rtrim(a_temp_temp));

    vector<int> 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<string> b_temp = split(rtrim(b_temp_temp));

    vector<int> b(3);

    for (int i = 0; i < 3; i++) {
        int b_item = stoi(b_temp[i]);

        b[i] = b_item;
    }

    vector<int> 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<int, int>(isspace)))
    );

    return s;
}

string rtrim(const string &str) {
    string s(str);

    s.erase(
        find_if(s.rbegin(), s.rend(), not1(ptr_fun<int, int>(isspace))).base(),
        s.end()
    );

    return s;
}

vector<string> split(const string &str) {
    vector<string> 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;
}

 

上一篇:Java并发基石之CAS原理


下一篇:优化&算法-2