关于带有向量参数的 void 函数的错误

Error about a void function with a vector argument

我遇到了一个关于 "simple" 练习的编码问题,该练习是关于对 n 个整数的向量中的内容进行排序。问题是编译器不接受 void 作为函数排序的类型(而且它必须是一个 void 函数)。但我真的不明白为什么。对于类型匹配的变量(例如指针 <-> v.begin())但对于函数则不匹配。任何帮助表示赞赏!这是我的代码:

#include <iostream>
#include <vector>

typedef std::vector<int>::iterator Vit;


void sort( Vit begin, Vit end){
    int len = end - begin;
    for(begin; begin < end; ++begin){
        for( int i = 1; i < len; ++i){
            if(*begin < *(begin +i ) ){
                *begin = *(begin + i);
            }
        }
    }
    std::cout<< "* ";
    for( begin; begin < end; ++begin){
        std::cout<< *begin<< " ";
    }
    std::cout<< "*";
    return;
}



int main(){
    int n;
    std::cin >> n;
    std::vector<int> v(n);
    for(Vit it = v.begin();it != v.end(); ++it){
        std::cin >> *it;
    }

    void sort (v.begin() , v.end());

}

有一些错误。 您在第一个 for 循环中递增 begin,但从不重置它。所以永远不会进入第二个for循环。每个 ++begin 都会改变迭代器的位置!循环 for( int i = 1; i < len; ++i) 将转到 begin 加上 i 的当前位置,从而离开内存。 以下应该做你想做的:

#include <iostream>
#include <vector>

typedef std::vector<int>::iterator Vit;

void sort( Vit begin, Vit end){
  for(Vit pos1=begin; pos1 < end; ++pos1) {
    for(Vit pos2=pos1+1; pos2 < end; ++pos2) {
      if(*pos1 < *pos2 ) {
    int swap = *pos1;
    *pos1 = *pos2;
    *pos2 = swap;
      }
    }
  }
  std::cout<< "* ";
  for(Vit it=begin; it < end; ++it){
    std::cout<< *it<< " ";
  }
  std::cout<< "*";
  return;
}

int main(){
  int n;
  std::cin >> n;
  std::vector<int> v(n);
  for(Vit it = v.begin(); it < v.end(); ++it){
    std::cin >> *it;
  }

  sort (v.begin() , v.end());
}