0

我正在尝试获取一个列表,并根据列表中的字符串在 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++;
    }
}

提前致谢。

4

2 回答 2

2

我认为这里需要更多的上下文,但我猜你想要的是这样的:

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) 初始化二维向量时,是否可以在插入每个元素时增加尺寸?...

是的。

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

是的,随用随用push_back就好。如果您知道您将需要大量容量并且担心效率,请考虑使用vector::reserve.

于 2016-02-22T03:40:58.963 回答
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,但仍想预留空间,也可以使用vector.reserve()

于 2016-02-22T03:33:17.387 回答