返回垃圾的简单重新排序函数

Simple reordering function returning garbage

本文关键字:排序 函数 新排序 简单 返回      更新时间:2023-10-16

作为我正在编写的一个更大程序的一部分,我正在重新排序一个向量。功能是:

void reorderVector(vector<char> &sourceVector){
    int vectorSize = sourceVector.size();
    vector<char> vectorOrdered;
    int i;
    for ( i = 0; i < vectorSize; i++){
            vectorOrdered.push_back(sourceVector.back());
            sourceVector.pop_back();
    }
    sourceVector = vectorOrdered;
}

我用来测试它的代码是:

int main(){
    vector<char> testVector[10];
    int i;
    for( i=0; i< 10; i++){
        testVector[i] = 100-i;
    }
    reorderVector(testVector);
    int j=0;
    while( j<10){
        cout<< testVector[i]<< endl;
    }
    return 0;
}

然而,我在编译(使用c++编译器)后得到了这个:

functionTest.cc: In function ‘int main()’:
functionTest.cc:35: error: no match for ‘operator=’ in ‘testVector[i] = (100 - i)’
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/vector.tcc:156: note: candidates are: std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = char, _Alloc = std::allocator<char>]
functionTest.cc:38: error: invalid initialization of non-const reference of type ‘std::vector<char, std::allocator<char> >&’ from a temporary of type ‘std::vector<char, std::allocator<char> >*’
functionTest.cc:14: error: in passing argument 1 of ‘void reorderVector(std::vector<char, std::allocator<char> >&)’
functionTest.cc:41: error: no match for ‘operator<<’ in ‘std::cout << testVector[i]’
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:108: note: candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>& (*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:117: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ios<_CharT, _Traits>& (*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:127: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:165: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:169: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:173: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(bool) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ostream.tcc:91: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:180: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ostream.tcc:105: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:191: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:200: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:204: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:209: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:213: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(float) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:221: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long double) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:225: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(const void*) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ostream.tcc:119: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_streambuf<_CharT, _Traits>*) [with _CharT = char, _Traits = std::char_traits<char>

我不知道为什么运算符有问题(减号有问题??)。我猜指针有问题吧?但是我不知道它是什么。如果它有任何帮助的话,我正在亚马逊服务器上编译这段代码。

 vector<char> testVector[10];

这意味着testVector是大小为10的数组,数组的每个元素都是char的向量。它与"相同"(语法方面)

 int testVector[10];
 //assume that you add typedef vector<char> int;

您可能想要以下内容:

vector<char> testVector(10);

代码中的另一个错误是你有一个死循环(永远循环):

int j=0;
while( j<10){
cout<< testVector[i]<< endl; 
  //^^^you have to increment j here in order to exit the loop 
  //^^^and why testVector[i]???
}

错误显示

 no match for ‘operator=’ in ‘testVector[i] = (100 - i)’

检查那条线。您可以看到,您将向量声明为向量数组:

vector<char> testVector[10];

所以=操作符想要将int转换为vector,这是不可能的(没有任何过载)。

看起来,你想要创建一个由10个元素组成的向量,而不是一个10个向量的数组,在这种情况下,你必须使用

vector<char> testVector(10);

请注意,我使用了圆括号来定义构造函数参数,而方括号用于数组。