1

順列インデックスを作成することになっている Accelerated C++ の例 5.1 を実行しようとしています。coutしたがって、各回転 (最初にステートメントでテストしたときに問題なく出力されます) をそれ自体のベクトルに入れようとしています。

#include <cctype>
#include <iostream>
#include <string>
#include <vector>

#include "split.h"


using namespace std;


void rotate(vector<string> lineSplit){

    // create vector of vectors, length is the amount
    // of words. Each vector will contain a rotation
//    std::vector<string> rotations(lineSplit.size(), "");
    std::vector<string> rotations(lineSplit.size(), "");

    for (int i=0; i<lineSplit.size(); i++){
        cout << "New Rotation: " << endl;

        for (int j=i; j<lineSplit.size(); j++){
            rotations[i].push_back(lineSplit[j]);
            cout << lineSplit[j] << endl;
        }
        // cout << "START IN HERE!" << endl;
            for (int j=0; j<i; j++){
                rotations[i].push_back(lineSplit[j]);
                cout << lineSplit[j] << endl;
            }
    }
}

int main()
{

    string line="The quick brown fox";
    vector<string> lineSplit = split(line);

    cout << "size of lineSplit is: " << lineSplit.size() << endl;

    rotate(lineSplit);

}

したがって、回転はベクトルのベクトルである必要があり、それぞれに回転が含まれています(コメントステートメントに従って)。「rotations[i].push_back(lineSplit[j])」を使用して個々のベクトルに追加できると思いましたが、コンパイラは不平を言っています:

main.cpp: In function ‘void rotate(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)’:
main.cpp:23: error: no matching function for call to ‘std::basic_string<char, std::char_traits<char>, std::allocator<char> >::push_back(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)’
/usr/include/c++/4.2.1/bits/basic_string.h:869: note: candidates are: void std::basic_string<_CharT, _Traits, _Alloc>::push_back(_CharT) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
main.cpp:28: error: no matching function for call to ‘std::basic_string<char, std::char_traits<char>, std::allocator<char> >::push_back(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)’
/usr/include/c++/4.2.1/bits/basic_string.h:869: note: candidates are: void std::basic_string<_CharT, _Traits, _Alloc>::push_back(_CharT) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]

ローテーションを間違って初期化しましたか?

4

1 に答える 1

2
 rotations[i].push_back(lineSplit[j]);

rotationsは文字列のベクトルなので、rotations[i]文字列です。lineSplitは文字列のベクトルなので、lineString[i]文字列です。push_back文字列内の文字列ではなく、文字列内の文字のみを使用できます。それrotationsは type を持つべきvector<vector<string> >です。

于 2013-07-26T12:07:55.813 に答える