将1D矢量插入到2D矢量中而不创建Temp 1D矢量

时间:2014-04-08 11:19:42

标签: c++ stdvector

这是我的代码。

vector<vector<string>> table;
vector<string> record;

// .....
record.push_back("Apple");
record.push_back("Orange");

table.push_back(record);

// ....

这里要在2D矢量中插入一行我创建一个名为record的新1D矢量。我的问题是,&#34;有没有办法在没有创建一维矢量的情况下将这些数据插入到二维矢量中?&#34;

4 个答案:

答案 0 :(得分:2)

有两种方法。第一种方法是使表成为向量的指针向量而不是向量向量。 即:

vector<vector<string>*> table

..然后将指针堆叠到记录而不是记录本身,这非常小。 另一种方式是如果你知道你不再使用你的1D矢量,你可以将它移动到表格矢量 即:

table.push_back(std::move(record));

只要知道,从那时起,通过这种方式,特定记录对象将处于未定义状态,即不可用,除非在表中。

答案 1 :(得分:1)

也许是这样的:

v.emplace_back( std::initializer_list<std::string> {"Apple", "Orange"} );

emplace_back转发其参数以构建一个向量。请参阅reference page

答案 2 :(得分:0)

此方法不是线程安全的,但如果您只有一个线程,则可能会获得良好的性能:

vector<vector<string> > table;

// insert empty element
table.push_back(vector<string>());

// get reference to last inserted element
vector<string>& record = table.back();
record.push_back("Apple");
record.push_back("Orange");

答案 3 :(得分:0)

如果您正在使用GCC,那么您可以使用“初始化列表”(C ++ 11功能),如下所示:

std::vector< std::vector<int> > myvector;
myvector[0] = {10,20,30};

但是,Visual Studio编译器仍然不支持此C ++ 11功能。