示例#1
1
void basic_algo(){
    cout<<endl<<"basic_algo :"<<endl;
    int ia[9] = {0, 1, 2, 3, 4, 5, 6, 7, 8 };
    vector<int> iv1(ia,ia+5);	vector<int> iv2(ia,ia+9);
    cout<<iv1<<endl<<iv2<<endl;
    pair<vector<int>::iterator,vector<int>::iterator> p = mismatch(iv1.begin(),iv1.end(),iv2.begin());	//返回在游标的哪个位置不匹配
    if(p.first != iv1.end())	cout<<*(p.first)<<endl;
    if(p.second != iv2.end())	cout<<*(p.second)<<endl;

    cout<<equal(iv1.begin(),iv1.end(),iv2.begin())<<endl;	//比较容器内内容
    cout<<equal(iv1.begin(),iv1.end(),&ia[3])<<endl;
    cout<<equal(iv1.begin(),iv1.end(),&ia[3],less<int>())<<endl;

    fill(iv1.begin(),iv1.end(),9);			//区间填充
    cout<<iv1<<endl;
    fill_n(iv1.begin(), 3, 7);		//区间n填充
    cout<<iv1<<endl;
    vector<int>::iterator iter1,iter2;
    iter1 = iter2 = iv1.begin();
    advance(iter2,3);						//游标向前移动
    iter_swap(iter1,iter2);					//交换两个游标内容
    cout<<iv1<<endl;
    swap(*iv1.begin(),*iv2.begin());	//交换两个游标内容
    cout<<iv1<<endl<<iv2<<endl;
    string stra1[] = {"jk","jK1","jk2"};	string stra2[] = {"jk","jk1","jk3"};
    cout<<lexicographical_compare(stra1,stra1+2,stra2,stra2+2)<<endl;
    cout<<lexicographical_compare(stra1,stra1+2,stra2,stra2+2,greater<string>())<<endl;

    copy(iv2.begin()+1,iv2.end(),iv2.begin());		//全部元素向前移一格
    cout<<iv2<<endl;
    copy_backward(iv2.begin(),iv2.end()-1,iv2.end());	//全部元素向后移一格
    cout<<iv2<<endl;
}
示例#2
0
    void quickSort(vector<int> &v, int start, int end){
    	if(start>=end)
    		return;
    	srand (time(NULL));

    	int pivot = rand()%(end-start+1)+start;

    	iter_swap(v.begin()+start,v.begin()+pivot);

    	int i=start+1;
    	int j=i;
    	for(;i<=end&&j<=end;){
    		if(compare(v[start],v[j]))
    		{
    			j++;
    		} else{
    			iter_swap(v.begin()+i,v.begin()+j);
    			i++;
    			j++;
    		}
    	}

    	iter_swap(v.begin()+start,v.begin()+i-1);

    	quickSort(v,start,i-2);
    	quickSort(v,i,end);
    }
示例#3
0
void sortFollowerWithMaster(vector<int>::iterator m_b,
		vector<int>::iterator m_e, vector<int>::iterator f_b,
		vector<int>::iterator f_e) {
	// masterとfollowerのサイズが一致するかチェック
	if (distance(m_b, m_e) != distance(f_b, f_e)) {
		cerr << "Error: Length of master and follower must be the same."
				<< endl;
		exit(1);
	}

	// 再帰の終了条件
	if (distance(m_b, m_e) <= 1) {
		return;
	}

	vector<int>::iterator m_l = m_b;
	vector<int>::iterator m_r = m_e - 1;
	vector<int>::iterator f_l = f_b;
	vector<int>::iterator f_r = f_e - 1;
	int pivot = *m_r;

	/*
	 処理の本体。
	 masterとfollowerを一緒に更新していくので、
	 インクリメントやディクリメントの処理がペアになっている。
	 */
	while (distance(m_l, m_r) > 0) {
		while (distance(m_l, m_r) > 0 && *m_l < pivot) {
			++m_l;
			++f_l;
		}
		if (distance(m_l, m_r) == 0) {
			break;
		}

		while (distance(m_l, m_r) > 0 && pivot <= *m_r) {
			--m_r;
			--f_r;
		}
		if (distance(m_l, m_r) == 0) {
			break;
		}

		iter_swap(m_l, m_r);
		iter_swap(f_l, f_r);
	}

	iter_swap(m_l, m_e - 1);
	iter_swap(f_l, f_e - 1);

	// 再帰
	sortFollowerWithMaster(m_b, m_l, f_b, f_l);
	sortFollowerWithMaster(m_l + 1, m_e, f_l + 1, f_e);
}
示例#4
0
文件: perms.c 项目: nocnokneo/caddy
// b points one element beyond the last element be reversing
void reverse(uint8_t *a, uint8_t *b)
{
  b--;                // point b to element to begin reversing

  if (a < b)
  {
    while(a < b)
      iter_swap(a++, b--);
  }
  else
  {
    while(b < a)
      iter_swap(b++, a--);
  }
}
示例#5
0
/**
* \brief Imprime todas as informações dos serviços do vetor
* \return Esta função não possui retorno
*/
void Empresa::printServicos()
{
	
	/*Algoritmo para ordenar o vetor por ordem crescente do código identificador.
	Foi feito depois do Doxygen, pelo que não é um função à parte.
	Mecanismo Bubblesort.*/

	int n = this->servicos.size();

	while (1)
	{
		bool swap = false;

		for (int i = 1; i < n; i++)
		{
			if (servicos[i - 1]->getId() > servicos[i]->getId())
			{
				iter_swap(servicos.begin() + i - 1, servicos.begin() + i);
				swap = true;
			}
		}

		n--;
		if (!swap)
			break;
	}

	cout << "SERVICOS" << endl << endl;

	cout << setw(4) << "ID" << setw(18) << "Preco (euros)" << setw(19) << "Distancia (km)" << setw(9) << "Status" << endl;
	for (unsigned int i = 0; i < this->servicos.size(); i++)
	{
		cout << setw(4) << this->servicos[i]->getId() << setw(18) << this->servicos[i]->getPreco() << setw(19) << this->servicos[i]->getDistancia() << setw(9) << this->servicos[i]->printStatus() << endl;
	}
}
示例#6
0
文件: perms.c 项目: nocnokneo/caddy
BOOL next_permutation(uint8_t *first, uint8_t *last)
{
   uint8_t *i = last - 1;;
   if( first == last )    // check for n=0
      return FALSE;
   if( first == i )       // check for n=1
      return FALSE;
      
   for(;;)
   {
      uint8_t *ii = i--;
      if (*i < *ii)
      {
         uint8_t *j = last;
         while( !(*i < *--j) ) ;
         
         iter_swap(i, j);
         reverse(ii, last);
         
         return TRUE;
      }
      if (i == first)
      {
         reverse(first, last);
         return FALSE;
       }
   }
}
示例#7
0
void Comparator::prepareTrees(){
	vector <vector<vector <Dir> > >::iterator it;
	vector<Dir> temp;
	vector<Dir>::iterator fIt;
	int i = 0,k=0,j;
	vector<vector <Dir> > currentFS;
	for(i = 0; i<k; i++){
		j=0;
		
		string path ="";
		for(string d : vcurrentTPath[k]){
			if(d[0]!='/')
				path = path +"/"+ d;
		}
		for(string majName : majorityChildren){
			
			majName = majName.substr(majName.find_last_of("/")+1);
			cout<<"majname = "<<majName<<endl;

			for(fIt = (*(vfileSystem[i].end()-1)).begin(); fIt!= (*(vfileSystem[i].end()-1)).end(); fIt++){
				if((*fIt).name == majName){
					cout<<"found"<<endl;
					iter_swap((*(vfileSystem[i].end()-1)).begin()+j, fIt); 
					j++;
					break;
				}
			}
		}

	}
	

}
示例#8
0
	bool prev_permutation(BidirIt first, BidirIt last) noexcept
	{
		if (first == last)
			return false;
		auto i = last;
		if (first == --i)
			return false;

		while (true) {
			BidirIt i1, i2;

			i1 = i;
			if (*i1 < *--i) {
				i2 = last;
				while (!(*--i2 < *i))
					;
				iter_swap(i, i2);
				reverse(i1, last);
				return true;
			}
			if (i == first) {
				reverse(first, last);
				return false;
			}
		}
	}
static void
dict_list_down_clicked_cb (GtkButton *button,
                           gpointer userdata)
{
    GtkTreeView *view = GTK_TREE_VIEW(userdata);
    GtkTreeModel *model = gtk_tree_view_get_model(view);
    GtkTreeSelection *selection = gtk_tree_view_get_selection(view);
    GtkTreeIter iter;
    if (gtk_tree_selection_get_selected(selection, NULL, &iter)) {
        GtkTreePath *path;
        GtkTreeIter next_iter;
        int i;
        path = gtk_tree_model_get_path(model, &iter);
        i = gtk_tree_path_get_indices(path)[0];
        if (i < __config_sysdicts.size() - 1) {
            vector<String>::iterator it  = __config_sysdicts.begin() + i;
            vector<String>::iterator it2 = it + 1;
            iter_swap(it, it2);
            __have_changed = true;
        }

        gtk_tree_path_next(path);
        if (gtk_tree_model_get_iter(model, &next_iter, path)) {
            gtk_list_store_move_after(GTK_LIST_STORE(model),
                                      &iter, &next_iter);
        }
        gtk_tree_path_free(path);
    }
}
示例#10
0
DECLARE_EXPORT const Demand::OperationPlanList& Demand::getDelivery() const
{
  // We need to check the sorting order of the list first! It could be disturbed
  // when operationplans are being moved around.
  // The sorting routine isn't very efficient, but should suffice since the
  // list of delivery operationplans is short and isn't expected to be
  // disturbed very often.
  for (bool swapped(!deli.empty()); swapped; swapped=false)
  {
    OperationPlanList::iterator j = const_cast<Demand*>(this)->deli.begin();
    ++j;
    for (OperationPlanList::iterator i =
        const_cast<Demand*>(this)->deli.begin();
        j!=const_cast<Demand*>(this)->deli.end(); ++j)
    {
      if ((*i)->getDates().getEnd() < (*j)->getDates().getEnd())
      {
        // Oh yes, the ordering was disrupted indeed...
        iter_swap(i,j);
        swapped = true;
        break;
      }
      ++i;
    }
  }

  return deli;
}
示例#11
0
 /**
  * @param nums: A list of integers
  * @return: A list of integers
  */
 vector<int> nextPermutation(vector<int> &nums) {
     // write your code here
     vector<int>::iterator first = nums.begin(), last = nums.end();
     if(first == last)
         return nums;
     vector<int>::iterator i = last;
     if(first == --i)
         return nums;
     while(true)
     {
         vector<int>::iterator l1 = i;
         if(*--i < *l1)
         {
             vector<int>::iterator l2 = last;
             while(*i >= *--l2)
                 ;
             iter_swap(i, l2);
             reverse(l1, last);
             return nums;
         }
         if(i == first)
         {
             reverse(first, last);
             return nums;
         }
     }
 }
示例#12
0
	bool next_permutation(BidirIt first, BidirIt last, Compare compare) noexcept
	{
		if (first == last)
			return false;
		auto i = first;
		if (++i == last)
			return false;

		i = last;
		--i;

		while (true) {
			auto __ii = i;
			--i;
			if (compare(*i, *__ii)) {
				auto __j = last;
				while (!compare(*i, *(--__j)))
					;
				iter_swap(i, __j);
				reverse(__ii, last);
				return true;
			}
			if (i == first) {
				reverse(first, last);
				return false;
			}
		}
	}
示例#13
0
  void
  remove_edge_if(Predicate p,
                 std::vector<EdgeList, Allocator>& g)
  {
      for (std::size_t u = 0; u < g.size(); ++u) {
          // Oops! gcc gets internal compiler error on compose_.......

          typedef typename EdgeList::iterator iterator;
          iterator b = g[u].begin(), e = g[u].end();

          if (!g[u].empty()) {

              for(; b != e;) {
                  if (p(std::make_pair(u, *b))) {
                      --e;
                      if (b == e)
                          break;
                      else
                          iter_swap(b, e);
                  } else {
                      ++b;
                  }
              }
          }

          if (e != g[u].end())
              g[u].erase(e, g[u].end());
      }
  }
示例#14
0
	bool next_permutation(BidirIt first, BidirIt last) noexcept
	{
		if (first == last || first == (last - 1))
			return false;

		auto i = last - 1;
		while (true) {
			auto __ii = i;
			--i;

			if (*i < *__ii) {
				auto __j = last;
				while (!(*i < *--__j))
					;
				iter_swap(i, __j);
				reverse(__ii, last);
				return true;
			}

			if (i == first) {
				reverse(first, last);
				return false;
			}
		}
	}
示例#15
0
sf::ConvexShape ConvexHull(vector<sf::Vector2f> Points)
{
    iter_swap(Points.begin(), min_element(Points.begin(), Points.end(), BottomLeftComp));

    AngleCompare AngleComp(Points.front());
    sort(Points.begin() + 1, Points.end(), AngleComp);

    int m = 0;
    for (unsigned int i = 1; i < Points.size(); i++)
    {
        while (CCW(Points[m == 0 ? Points.size() - 1 : m - 1], Points[m], Points[i]) >= 0.f)
        {
            if (m > 0)
                m--;
            else if (i == Points.size() - 1)
                break;
            else
                i++;
        }

        m++;
        swap(Points[m], Points[i]);
    }

    sf::ConvexShape Shape(m + 1);
    for (unsigned int i = 0; i < Shape.getPointCount(); i++)
        Shape.setPoint(i, Points[i]);

    return Shape;
}
示例#16
0
template<class Iterator> void bubblesort(Iterator start, Iterator end) {

	Iterator curr = start;

	bool count_iteration = true;

	int n = 2;

	for (bool swapped = true; swapped && n > 1; ) {

		if (count_iteration)
			n = 0;

		swapped = false;
		for(; curr != end; ) {

			if (count_iteration) 
				n++;
				
			Iterator prev = curr;
			++curr;
			
			if(curr == end) break;

			if( *prev > *curr ) {
				iter_swap(prev, curr);
				swapped = true;		
			}
		}

		curr = start;
		--n;
		count_iteration = false;
	}
}
示例#17
0
static void RandInts(
    vec_int& ints,    // out: scrambled integers in range 0 ... NSIZE(ints)-1
    int      seed)    // in:  random seed
{
    const int n = NSIZE(ints);
    CV_Assert(n > 0);
    if (n > RAND_MAX)
        Err("vector size %d is too big (max allowed is %d)", n, RAND_MAX);
    CV_Assert(seed != 0);
    if (seed == 1)       // 1 has a special meaning which we don't want
        seed = int(1e6); // arb

    int i;
    for (i = 0; i < n; i++)
        ints[i] = i;

    srand(seed);

    // We use our own random shuffle here because different compilers
    // give different results which messes up regression testing.
    // (I think only Visual C 6.0 is incompatible with everyone else?)
    //
    // Following code is equivalent to
    //    random_shuffle(ints.begin(), ints.end(),
    //       pointer_to_unary_function<int,int>(RandInt));

    vec_int::iterator it = ints.begin();
    for (i = 2; ++it != ints.end(); i++)
        iter_swap(it, ints.begin() + rand() % n);
}
示例#18
0
/*pourrir la vie de l’adversaire* : utiliser au maximum les attaques et avancer des que l’adversaire est bloque.*/
void JoueurPourrir::choisirCarte(std::vector<Carte*> tasAdv, std::vector<Carte*> defausse){
    bool tag = true; //permet d'éviter de jouer plusieurs fois en un tour
    for (int i=0; i<main.size(); i++){ //on essaie de jouer une parade, car c'est la priorité.
        if (estJouable(main.at(i), tasAdv.back()) && main.at(i)->getType() == "Parade" && tag){
                tas.push_back(main.at(i));
                iter_swap(main.begin() + i, main.end());
                main.pop_back();
                tag = false;
        }
    }
    if(tag){ //si on n'a pas encore joué
        for (int i=0; i<main.size(); i++){
            if (estJouable(main.at(i), tasAdv.back()) && main.at(i)->getType() == "Attaque" && tag){
                tasAdv.push_back(main.at(i));
                iter_swap(main.begin() + i, main.end());
                main.pop_back();
                tag = false;
            }
        }
    }
     if(tag){ //si on n'a toujours pas joué
         for (int i=0; i<main.size(); i++){
            if (estJouable(main.at(i), tasAdv.back()) && main.at(i)->getType() == "Point" && tag){
            tas.push_back(main.at(i));
                iter_swap(main.begin() + i, main.end());
                main.pop_back();
            tag = false;
            }
        }
    }
    if (tag){ //si à la fin on a pas joué, on doit se défausser d'une carte
        for (int i=0; i<main.size(); i++){
            if (main.at(i)->getType() == "Point"){
                defausse.push_back(main.at(i));
                iter_swap(main.begin() + i, main.end());
                main.pop_back();
            }
        }

    }
            //elseif carte parade dans la main && mon tas == carte attaque && mon tas == carte attaque
                //if groupe(carteparade) == groupe(carteattaque)
                    //se débloquer
                //else se défausser
            //else se défausser

    }
示例#19
0
void Layer::setLayerIndex(int index)
{
	vector<Layer*> &layers = manager->layers;
	if (index < 0 || index >= layers.size()) return;
	
	vector<Layer*>::iterator it = layers.begin();
	iter_swap(it + layer_index, it + index);
}
示例#20
0
文件: lhs.hpp 项目: rmcantin/bayesopt
    void randomPerms(D& arr, randEngine& mtRandom)
    {
      typedef typename D::iterator iter;

      randInt sample(mtRandom, intUniformDist(0,arr.size()-1));
      for (iter it=arr.begin(); it!=arr.end(); ++it)
	iter_swap(arr.begin()+sample(),it);
    } // randomPerms 
示例#21
0
void EventHandle::OrderInput() // If input has moved around in the vector, re-orders it to match 
{
	for (int i = 0; i < m_vKeys.size(); ++i)
	{
		for (int j = 0; j < m_vPrevKeys.size(); ++j)
		{
			if ((i < m_vPrevKeys.size()) && (m_vKeys[i] == m_vPrevKeys[j]))
			{
				iter_swap(m_vPrevKeys.begin() + i, m_vPrevKeys.begin() + j);
				iter_swap(m_vUntilRepeat.begin() + i, m_vUntilRepeat.begin() + j);
				iter_swap(m_vUntilPressed.begin() + i, m_vUntilPressed.begin() + j);
			}
			else if ((j < m_vKeys.size()) && (m_vKeys[i] == m_vPrevKeys[j]))
				iter_swap(m_vKeys.begin() + i, m_vKeys.begin() + j);
		}
	}
}
示例#22
0
void swappable_iterator_test(Iterator i, Iterator j)
{
    Iterator i2(i), j2(j);
    typename detail::iterator_traits<Iterator>::value_type bi = *i, bj = *j;
    iter_swap(i2, j2);
    typename detail::iterator_traits<Iterator>::value_type ai = *i, aj = *j;
    assert(bi == aj && bj == ai);
}
示例#23
0
vector<int> slashBurn(Graph &graph, int K)
{
	//printGraph(graph);
    int p = 0, q = (int)graph.size() - 1;
    vector<int> weightsum(q + 1, 0);
    vector<int> idX(q + 1, 0), xId(q + 1, 0);
    for(int i = 0; i < q + 1; i++){
        idX[i] = xId[i] = i;
    }
    calcWeightSum(weightsum, graph);
    while(q - p + 1 > K){
		if(TKDE){
        /* TKDE: select topK in greedy way */
			for(int i = 0; i < K; i++, p++){
				int maxloc = select_biggest(weightsum, xId, p, q);
				remove_vertex_from_graph(graph, xId[maxloc], weightsum);
				iter_swap(idX.begin() + xId[p], idX.begin() + xId[maxloc]);
				iter_swap(xId.begin() + maxloc, xId.begin() + p);
			}
		}
		else{
		/* ICDM: select topK directly */
			vector<int> maxloc = select_topk(weightsum, xId, p, q, K);
			for(vector<int>::iterator it = maxloc.begin(); it != maxloc.end(); ++it, p++){
				remove_vertex_from_graph(graph, xId[*it], weightsum);
				iter_swap(idX.begin() + xId[p], idX.begin() + xId[*it]);
				iter_swap(xId.begin() + *it, xId.begin() + p);
			}
		}
		//Map or vector, trade-off between space and time
        vector<int> vertexCC(graph.size(), 0);
        vector<pair<int, int> > ccMetric(graph.size());
        find_cc(graph, p, q, xId, idX, vertexCC, ccMetric);
        vector<int> newx2X;
        int Q = sort_vertex(newx2X, vertexCC, ccMetric);
        if(Q == -1){
            break;
        }
        for(int i = Q; i < (int)newx2X.size(); i++){
            remove_vertex_from_graph(graph, xId[newx2X[i]], weightsum);
        }
        shuffle_vertex(newx2X, xId, idX, p);
        q = p + Q - 1;
    }
    return idX;
}
示例#24
0
void sortFollowerWithMaster(vector<vector<int> >::iterator m_b,
		vector<vector<int> >::iterator m_e, vector<int>::iterator f_b,
		vector<int>::iterator f_e) {
	if (distance(m_b, m_e) != distance(f_b, f_e)) {
		cerr << "Error: Length of master and follower must be the same."
				<< endl;
		exit(1);
	}

	if (distance(m_b, m_e) <= 1) {
		return;
	}

	vector<vector<int> >::iterator m_l = m_b;
	vector<vector<int> >::iterator m_r = m_e - 1;
	vector<int>::iterator f_l = f_b;
	vector<int>::iterator f_r = f_e - 1;
	vector<int> pivot = *m_r;

	while (distance(m_l, m_r) > 0) {
		while (distance(m_l, m_r) > 0 && *m_l < pivot) {
			++m_l;
			++f_l;
		}
		if (distance(m_l, m_r) == 0) {
			break;
		}

		while (distance(m_l, m_r) > 0 && pivot <= *m_r) {
			--m_r;
			--f_r;
		}
		if (distance(m_l, m_r) == 0) {
			break;
		}

		iter_swap(m_l, m_r);
		iter_swap(f_l, f_r);
	}

	iter_swap(m_l, m_e - 1);
	iter_swap(f_l, f_e - 1);

	sortFollowerWithMaster(m_b, m_l, f_b, f_l);
	sortFollowerWithMaster(m_l + 1, m_e, f_l + 1, f_e);
}
示例#25
0
void select_sort(iterator begin, iterator end) {
	for (iterator round=begin; round<end-1; ++round) {
		iterator min=round;
		for (iterator it=round+1; it<end; ++it)
			if (*it<*min) min=it;
		iter_swap(round, min);
	}
}
示例#26
0
template <class ZT, class FT> void MatHouseholder<ZT, FT>::swap(int i, int j)
{
  FPLLL_DEBUG_CHECK(0 <= i && i < j && j < d);

  // Invalidate to the min not modified row, that is i
  invalidate_row(i);

  b.swap_rows(i, j);
  bf.swap_rows(i, j);
  iter_swap(sigma.begin() + i, sigma.begin() + j);
  if (enable_row_expo)
    iter_swap(row_expo.begin() + i, row_expo.begin() + j);
  iter_swap(init_row_size.begin() + i, init_row_size.begin() + j);
  iter_swap(R_history.begin() + i, R_history.begin() + j);
  if (enable_transform)
  {
    u.swap_rows(i, j);
    if (enable_inverse_transform)
      u_inv_t.swap_rows(i, j);
  }
  iter_swap(norm_square_b.begin() + i, norm_square_b.begin() + j);
  iter_swap(expo_norm_square_b.begin() + i, expo_norm_square_b.begin() + j);

#ifdef DEBUG
  iter_swap(col_kept.begin() + i, col_kept.begin() + j);
#endif  // DEBUG
}
vector<City> Agent::hillClimb(vector<City> cities) {
	City start_city = cities[0];
	vector<City> journeyPath;

	journeyPath.push_back(cities[0]);

	double min;
	int minIndex;
	double totalDistance = 0;

	while (cities.size() != 1) {

		if (shortestDistance != 0 && totalDistance > shortestDistance) {
			return shortestRoute;
		}

		min = calculateDistance(cities[0].get_x(), cities[0].get_y(),
				cities[1].get_x(), cities[1].get_y());
		minIndex = 1;
		for (std::vector<City>::iterator it = cities.begin() + 2;
				it != cities.end(); ++it) {
			double distance = calculateDistance(cities[0].get_x(),
					cities[0].get_y(), (*it).get_x(), (*it).get_y());
			if (distance < min) {
				min = distance;
				minIndex = it - cities.begin();
			}
		}

		totalDistance += min;

		iter_swap(cities.begin(), cities.begin() + minIndex);
		journeyPath.push_back(cities[0]);
		cities.erase(cities.begin() + minIndex);
	}

	double lastDistance = abs(
			(journeyPath.back().get_x() - cities[0].get_x())
					+ (journeyPath.back().get_y() - cities[0].get_y()));
	cities.erase(cities.begin());
	totalDistance += lastDistance;

	double distanceBackToInitial = abs(
			(journeyPath.back().get_x() - journeyPath[0].get_x())
					+ (journeyPath.back().get_y() - journeyPath[0].get_y()));
	journeyPath.push_back(journeyPath[0]);
	totalDistance += distanceBackToInitial;

	if (shortestDistance != 0 && totalDistance > shortestDistance) {
		return shortestRoute;
	} else {
		shortestRoute = journeyPath;
		shortestDistance = totalDistance;
	}

	return shortestRoute;
}
	//Swaps item at index _a with item at index _b
	void swap(long _a, long _b)
	{
		if(_a == _b) return;

		//Store entry pointed to by the id of _a
		slot swap = {_a, m_ids[_b].m_version};

		//Make the entry at _a's id point to _a's future index.
		m_indirection[ m_ids[_a].m_id ] = {_b, m_ids[_a].m_version};
		//Make the entry at _b's id point to _b's future index.
		m_indirection[ m_ids[_b].m_id ] = swap;

		//std::swap( m_objects[_a], m_objects[_b] );
		//std::swap( m_ids[_a], m_ids[_b] );

		iter_swap( m_objects.begin() + _a, m_objects.begin() + _b );
		iter_swap( m_ids.begin() + _a, m_ids.begin() + _b );
	}
示例#29
0
	ForwardIt1 swap_ranges(ForwardIt1 first, ForwardIt1 last, ForwardIt2 first2) noexcept
	{
		while (first != last) {
			iter_swap(first, first2);
			++first;
			++first2;
		}
		return first2;
	}
示例#30
0
int main ()
{
  vector <int> v1 (6);
  iota (v1.begin (), v1.end (), 0);
  iter_swap (v1.begin (), v1.begin () + 3);
  ostream_iterator <int> iter (cout, " ");
  copy (v1.begin (), v1.end (), iter);
  cout << endl;
  return 0;
}