簡體   English   中英

C ++多維向量

[英]C++ Multidimensional Vector

如何在C ++中使用vector制作這樣的表:

65  A
66  B
67  C

我是用這樣的動態2D數組完成的:

int** ary = new int*[2];
for (int i = 0; i < size; ++i)
    ary[i] = new int[size];

// fill the array
for (int i = 0; i < size; i++) {
    ary[i][0] = ascii_values[i];

}
for (int i = 0; i < size; i++) {
    ary[i][1] = ascii_chars[i];

}

我該如何使用vector? 我當時正在考慮將兩個向量放在第三個向量中,但是我不知道這是否可行。 PS一切都必須是動態的,因為我將從文件中導入數據,請幫助:)

您的數據實際上並不是真正的多維數據,而是int, char對的列表。 因此,最自然的將是std::vector<std::pair<int,char>> 恕我直言,只要您可以命名一對,就應該這樣做,即

struct Foo {    // I cannot, but you can choose better names
     int x;
     char y;
};

並通過創建向量

std::vector<Foo> f;

有關如何使用向量的信息,請參考網上可以找到的大量材料。

但是,如果您已經在注釋中提到過,您已經將數據分為兩個向量,那么最簡單的方法就是使用一些

struct Bar {
    std::vector<char> x;
    std::vector<int> y;
};

其中可能包含相同的數據,但是取決於您需要如何處理數據,與std::vector<Foo>相比,效率可能更高或更低(您是否需要獨立或始終以成對的方式訪問char和int ?)。

您可以使用std::pair向量輕松實現上述行為。 觀看演示

#include <utility>
#include <vector>
#include <algorithm>
#include <iostream>

int main() {
 std::vector<std::pair<int,char>> result;
 std::vector<int> ascii_vals {65, 66, 67};
 std::vector<char> ascii_chars {'a', 'b', 'c'};

 auto ItA = ascii_vals.begin();
 auto ItB = ascii_chars.begin();

 while(ItA != ascii_vals.end() && ItB != ascii_chars.end())
 {
    result.push_back(std::make_pair(*ItA,*ItB));

    if(ItA != ascii_vals.end())
    {
        ++ItA;
    }
    if(ItB != ascii_chars.end())
    {
        ++ItB;
    }
 }

 for(std::vector<std::pair<int, char> >::iterator it = result.begin(); it != result.end(); it++)
    std::cout << "(" << it->first << ", " << it->second << ")" << std::endl;

 return 0;
}

上面的代碼將打印:

(65, a)
(66, b)
(67, c)

暫無
暫無

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

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