Example #1
0
 int btoi(const vector<int> &gray)
 {
     int i = 0;
     for (auto ri = gray.crbegin(); ri != gray.crend(); ++ri)
     {
         i = i * 2 + *ri;
     }
     return i;
 }
Example #2
0
void print_revit(vector<double> vec) {

    std::cout << "\nMy vector contains" << std::endl;

    for(auto rit=vec.crbegin(); rit!=vec.crend();rit++){
      std::cout <<"["<< *rit <<"]"<< " " ;
    }

    std::cout << "\nEnd of vector" << std::endl;

}
Example #3
0
void printReverse(vector<int> vec){
	auto riter = vec.crbegin();
	while (riter != vec.crend())
		cout << *(riter++) << "\t";
	cout << endl;

	auto iter = vec.cend();
	while (iter != vec.cbegin())
		cout << *(--iter) << "\t";
	cout << endl;
}
Example #4
0
symbol* lookupSym(const string* x) {
    for(auto i=symbol_stack.crbegin(); i!=symbol_stack.crend(); ++i) {
        if(*i == nullptr) {
            continue;
        }
        symbol_table* pos = *i;
        auto result = pos->find(x);
        if(result!=pos->cend()) return result->second;
    }
    return NULL;
}
Example #5
0
 int intValue() const
 {
     int p = 1;
     int val = 0;
     for (vector<const Symbol*>::const_reverse_iterator it = symbols_.crbegin();
         it != symbols_.crend(); ++it)
     {
         val += (*it)->value() * p;
         p *= 20;
     }
     return val;
 }
Example #6
0
bool lookup(const string* x) {
    for(auto i=symbol_stack.crbegin(); i!=symbol_stack.crend(); ++i) {
        if(*i == nullptr) {
            continue;
        }
        symbol_table* pos = *i;
        auto result = pos->find(x);
        if(result!=pos->cend()) return true;

    }
    return false;
}
/**
 * Takes in a vector of terminals and combines
 * them to make one correctly formated string.
 */
string formatForOutput(const vector<string>& aResult)
{
  // String to store final combined output.
  string myString;

  // Loop through vector to append parts.
  for(auto start = aResult.crbegin(); start != aResult.crend(); start++)
  {
    if(start == aResult.crend()-1)
    {
      // Last insert.
      myString.insert(0, (*start) );
    }
    else if( (*start).find_first_of(".?:!,") != string::npos)
    {
      // If punctuation found.
      if((*start).find_first_not_of(".?:!,") != string::npos)
      {
        // Word includes punctuation.
        myString.insert(0, " "+(*start) );
      }
      else
      {
        // Isolated Punctuation found.
        myString.insert(0, (*start) );
      }
    }
    else
    {  
      // Not punctuation.
      myString.insert(0, " "+(*start) );
    }
  }

  return myString;
}
Example #8
0
T find_biggest_n_1_product(const vector<T> &A) {
  // Build forward product L, and backward product R
  vector<T> L, R(A.size());
  partial_sum(A.cbegin(), A.cend(), back_inserter(L), multiplies<T>());
  partial_sum(A.crbegin(), A.crend(), R.rbegin(), multiplies<T>());

  // Find the biggest product of (n - 1) numbers
  T max_product = numeric_limits<T>::min();
  for (int i = 0; i < A.size(); ++i) {
    T forward = i > 0 ? L[i - 1] : 1;
    T backward = i + 1 < A.size() ? R[i + 1] : 1;
    max_product = max(max_product, forward * backward);
  }
  return max_product;
}
Example #9
0
	// DFS 遍历树,生成路径
	void gen_path(const string &s, const vector<vector<bool> > &prev,
		int cur, vector<string> &path, vector<string> &result) {
		if (cur == 0) {
			string tmp;
			for (auto iter = path.crbegin(); iter != path.crend(); ++iter)
				tmp += *iter + " ";
			tmp.erase(tmp.end() - 1);
			result.push_back(tmp);
		}
		for (size_t i = 0; i < s.size(); ++i) {
			if (prev[cur][i]) {
				path.push_back(s.substr(i, cur - i));
				gen_path(s, prev, i, path, result);
				path.pop_back();
			}
		}
	}
Example #10
0
	// DFS 遍历树,生成路径
	void gen_path(const string &s, const vector<vector<bool> > &prev,
		int cur, vector<string> &path, vector<string> &result) {
		if (cur == 0) {
			string tmp;
			//push的时候是逆序的,现在再逆过来
			for (auto iter = path.crbegin(); iter != path.crend(); ++iter){
				tmp += *iter + " ";
			}
			tmp.erase(tmp.end() - 1);
			result.push_back(tmp);
		}
		for (size_t i = 0; i < s.size(); ++i) {
			if (prev[i][cur]) { //如果从s[cur, i)是一个dict中的单词
				path.push_back(s.substr(i, cur - i)); //把该单词入栈
				gen_path(s, prev, i, path, result); //对字符串剩余部分递归
				path.pop_back(); //还原现场
			}
		}
	}
vector<Point> makeConvexHullPresorted(const vector<Point> &points) {
	if (points.size() <= 1)
		return vector<Point>(points);
	
	// Andrew's monotone chain algorithm. Positive y coordinates correspond to "up"
	// as per the mathematical convention, instead of "down" as per the computer
	// graphics convention. This doesn't affect the correctness of the result.
	
	vector<Point> upperHull;
	for (const Point &p : points) {
		while (upperHull.size() >= 2) {
			const Point &q = *(upperHull.cend() - 1);  // Same as .back()
			const Point &r = *(upperHull.cend() - 2);
			if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x))
				upperHull.pop_back();
			else
				break;
		}
		upperHull.push_back(p);
	}
	upperHull.pop_back();
	
	vector<Point> lowerHull;
	for (vector<Point>::const_reverse_iterator it = points.crbegin(); it != points.crend(); ++it) {
		const Point &p = *it;
		while (lowerHull.size() >= 2) {
			const Point &q = *(lowerHull.cend() - 1);  // Same as .back()
			const Point &r = *(lowerHull.cend() - 2);
			if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x))
				lowerHull.pop_back();
			else
				break;
		}
		lowerHull.push_back(p);
	}
	lowerHull.pop_back();
	
	if (!(upperHull.size() == 1 && upperHull == lowerHull))
		upperHull.insert(upperHull.end(), lowerHull.cbegin(), lowerHull.cend());
	return upperHull;
}
Example #12
0
//辅助函数,生成路径,DFS
void wordbreak_genpath(const string &s, const vector<vector<bool>> &prev, int cur, vector<string> &path, vector<string> &result)
{
    if (cur == 0)
    {
        string tmp;
        //反转
        for (auto iter = path.crbegin(); iter != path.crend(); ++iter)
        {
            tmp += *iter + " ";
        }
        //删除最后的一个空格
        tmp.erase(tmp.end() - 1);
        result.push_back(tmp);
    }
    for (size_t i = 0; i < s.size(); i++)
    {
        if (prev[cur][i])
        {
            path.push_back(s.substr(i, cur - i));
            wordbreak_genpath(s, prev, i, path, result);
            path.pop_back();
        }
    }
}