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    

  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 unary_negate not1 (const Predicate& pred);

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()

function template

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

你可能感兴趣的:(C&C++,c++)