2015-04-03 115 views
2

如何用不同类型的变量声明和push_back矢量的矢量。是一种很好的方法(使用数组更好)吗?C++矢量与不同类型的矢量

我的变量是这样的:

int id; 
string name; 
int start; 
int end; 

,我想获得一个列表: ((ID1名1启动1 END1),(ID2名2 START2 END2)...

对不起这个基本问题,但我使用Python,它允许工作 感谢

+2

简单地说,你可能要一个'struct'的载体。 – 2015-04-03 14:03:13

+0

你使用的是C++ 11吗? – 2015-04-03 14:03:42

+0

为了使用不同的类型变量。使用void *指针我认为 – 2015-04-03 14:03:47

回答

6

你不想一个二维数组,你想要的记录数组事情是这样的:。

struct Record 
{ 
    int id; 
    std::string name; 
    int start; 
    int end; 
}; 

std::vector<Record> records; 
+0

谢谢,但为什么我不需要2D数组?我想保存所有我的ID ... – user3608663 2015-04-03 14:06:48

+1

@ user3608663这个答案会保存你的所有ID。你可能正处于研究“struct”是个好主意的阶段。 – 2015-04-03 14:09:23

+0

但是,如果我把:records.id = 1和records.id = 2后,这将取代1 2,不是? – user3608663 2015-04-03 14:13:46

3

您还可以使用std::tuple(C++ 11)推入元组向量

#include <iostream> 
#include <tuple> 
#include <string> 
#include <vector> 

int main() 
{ 
    using record = std::tuple<int, std::string, int, int>; 
    std::vector<record> v; 
    v.emplace_back(1, "test1", 2, 3); 
    v.emplace_back(10, "test2", 20, 30); 

    for(auto&& elem: v) // display the elements 
    { 
     std::cout << std::get<0>(elem) << " "; 
     std::cout << std::get<1>(elem) << " "; 
     std::cout << std::get<2>(elem) << " "; 
     std::cout << std::get<3>(elem) << std::endl; 
    } 
} 
+0

您也可以使用'emplace_back'并摆脱临时。 – 0x499602D2 2015-04-03 14:20:32

+0

@ 0x499602D2确实,修改了,谢谢 – vsoftco 2015-04-03 14:21:05

+0

没有python,但我认为它是最接近的 – 2015-04-03 14:26:21