[英]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.