zoukankan      html  css  js  c++  java
  • 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.
    ";
      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 << '
    ';
    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 << "
    ";
    
        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;
    }
  • 相关阅读:
    Python:文件操作技巧(File operation)
    使用多域名实现并行下载
    win7 + cygwin + nodejs很详细的安装步骤【推荐】
    gzip压缩
    C#中一些常用的方法使用
    C#中的@符号的使用
    Sql中partition by的使用
    C#中使用WCF一些常见问题及解决方案
    C# MVC中直接执行Js
    MVC路由规则进一步了解
  • 原文地址:https://www.cnblogs.com/dongguolei/p/14182421.html
Copyright © 2011-2022 走看看