关于带有向量参数的 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());
}
我遇到了一个关于 "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());
}