将字符串列表插入到2d向量

时间:2016-02-22 03:13:49

标签: c++ list vector iterator 2d-vector

我试图获取一个列表,并根据列表中的字符串在2d向量中创建一个新行。我是c ++的新手,有几个问题:

1)我能够遍历列表,并获取迭代器当前所在的字符串吗?如果是这样,我怎么能将该字符串添加到向量中?

2)我如何在二维矢量中实现它?

3)初始化2d向量时,在插入每个元素时,是否会推迟工作以增加大小?我目前将其初始化为10,但是想将其初始化为0,并在插入字符串时增加向量。 (不确定这是否是最佳方法)

std::vector<std::vector<string> >myVector(10, std::vector<string>(10));
std::list<string> myList;
list<string>::iterator i;
inputList(myList);

int vectorRow = 0;
int vectorCol = 0;

//Insert list into vector
for (i = myList.begin(); i != myList.end(); i++) {
    //add to the current row of the vector
    if (*i == "endOfRow"){
        vectorRow++;
        vectorCol = 0;
    } else {
        //add to the column of the vector
     vectorCol++;
    }
}

提前致谢。

2 个答案:

答案 0 :(得分:1)

std::list<std::string> myList;
inputList(myList);

std::vector<std::vector<std::string>>myVector(1);        
for (const auto& str : myList) 
{
    if (str == "endOfRow")
        myVector.push_back({});
    else
        myVector.back().emplace_back(str);
}

if (myList.empty()) 
    myVector.clear();

// there is no need to update these values inside the loop
int vectorRow = (int)myVector.size();
int vectorCol = (int)myVector.back().size();
  

1)我能够遍历列表,并获取该字符串   迭代器目前在?如果是这样,我怎么能添加该字符串   向量?

是。你这样做的方式是正确的,尽管你可以使用更好的语法。要将它添加到向量,只需emplace_back()或push_back()。

  

3)初始化2d向量时,会推迟工作   插入每个元素时增加大小?

会的。但正如您所说,如果您在开始时知道列表的大小,则可以轻松初始化它以使其更加优化。如果你不想初始化矢量,但仍想保留空间,你也可以使用vector.reserve()

答案 1 :(得分:1)

我认为这里需要更多的背景,但我猜你想要的是这样的:

std::vector<std::vector<string> > myVector(1);
std::list<string> myList;
inputList(myList);

//Insert list into vector
for (list<string>::iterator i = myList.begin(); i != myList.end(); i++) {
    //add to the current row of the vector
    if (*i == "endOfRow"){
        myVector.push_back(std::vector<string>());
    } else {
        //add to the column of the vector
        myVector.back().push_back(*i);
    }
}
  

1)我能够遍历列表,并获取迭代器当前所在的字符串吗?如果是这样,我怎么能将该字符串添加到向量中?

你可以,但你也可以通过解除引用来获取你的迭代器指向的字符串,例如:如果您的迭代器被称为iter,那么您只需编写*iter。我很困惑,因为你的例子似乎已经这样做了。

  

2)我如何在二维矢量中实现它?

在回答这个问题之前,需要通过问题1找出你真正想要做的事情。

  

3)初始化2d向量时,在插入每个元素时,是否会推迟工作以增加大小?...

  

...我目前在10岁时将其初始化,但是希望将其初始化为0,并在插入字符串时增加向量。 (不确定这是否是最佳方法)

是的,你可以随时使用push_back。如果您知道自己需要大量容量并且关注效率,请考虑使用vector::reserve