簡體   English   中英

多個向量的數據表示

[英]Data representation for multiple vectors

我有兩個目錄和電影。 我需要用一組特定的電影來代表一個目錄(每個目錄僅4個)。 可以說我們有2個目錄和8個電影。 1個目錄將包含4個電影,另一個目錄將包含4個。從編程上來說,它的第0個目錄包含:0到3個電影ID,第1個目錄包含:4到7個電影ID。 我已經編寫了以下代碼,但是在向量的幫助下,無法實現預期輸出與原始輸出中所示的內容。

#include <iostream>
#include <vector>

using namespace std;

const int noofmovies = 4;

class Myclass{
private:
    int directory;
    vector<int> directories;
    vector<int> movies;
public:
    void read();
    void display() const;
};
void Myclass::read(){
    cout << "Enter number of directories: " << endl;
    cin >> directory;
    for(int i=0;i<directory;i++){
        directories.push_back(i);
    }
    for(int j=0;j<(directory*noofmovies);j++){
        movies.push_back(j);
    }
}
void Myclass::display() const{
    for(int i=0;i<directories.size();i++){
        cout << "directory[" << i << "]" << " contains " << endl;
    }
    for(int j=0;j<movies.size();j++){
        cout << "movies[" << j <<"]" <<endl;
    }
}
int main(){
    Myclass my;
    my.read();
    my.display();
}

原始輸出:

Enter number of directories:
2
directory[0] contains
directory[1] contains
movies[0]
movies[1]
movies[2]
movies[3]
movies[4]
movies[5]
movies[6]
movies[7]

預期輸出:

Enter number of directories:
2
directory[0] contains
movies[0]
movies[1]
movies[2]
movies[3]
directory[1] contains
movies[4]
movies[5]
movies[6]
movies[7]

好吧,我嘗試如下修改循環,但結果不是我想要的:

    void Myclass::read(){
    cout << "Enter number of directories: " << endl;
    cin >> directory;

    for(int i=0;i<directory;i++){
        directories.push_back(i);
        for(int j=0;j<noofmovies;j++){
            movies.push_back(j);
        }
    }
}
void Myclass::display() const{

    for(int i=0;i<directories.size();i++){
        cout << "directory[" << i << "]" << " contains " << endl;
        for(int j=0;j<movies.size();j++){
            cout << "movies[" << j <<"]" <<endl;
        }
    }

}

問題出在Myclass::display() const成員函數中。 其他功能的兩種實現都可以。

您最后一次嘗試是最接近的。 唯一的問題是嵌套的for循環的循環邊界。

當前,您循環播放所有movies ,即

for (int j=0 ; j < movies.size() ; j++)

這是不正確的,因為它使每個目錄看起來都擁有所有電影。 但是,目錄i擁有從i*noofmovies (含)到(i+1)*noofmovies (不包含(i+1)*noofmovies 換句話說,將內部循環更改為

for (int j=i*noofmovies ; j < (i+1)*noofmovies ; j++)

將修復您的程序。

您可以通過以下代碼來實現

void Myclass::display() const{
    int j = 0;    

    for(int i=0;i<movies.size();i++){
        if(i % noofmovies == 0){
            cout << "directory[" << j++ << "]" << " contains " << endl;
        }

        cout << "movies[" << i <<"]" <<endl;
    }
}

但是,您並沒有持有目錄和電影之間的實際鏈接。 在現實世界中,我認為Directory是具有屬性vector<int> moviesclass會更好。 然后,您可以迭代vector<Directory> directories並為每個directory迭代其movies

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM