将字符串列表插入二维向量
Posted
技术标签:
【中文标题】将字符串列表插入二维向量【英文标题】:Insert list of strings into 2d vector 【发布时间】:2016-02-22 03:13:48 【问题描述】:我正在尝试获取一个列表,并根据列表中的字符串在二维向量中创建一个新行。我是 C++ 新手,有几个问题:
1) 我是否能够遍历列表,并获取迭代器当前所在的字符串?如果是这样,我怎样才能将该字符串添加到向量中?
2) 我如何在二维向量中实现它?
3) 在初始化二维向量时,在插入每个元素时,推回是否能够增加大小?我目前将其初始化为 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++;
提前致谢。
【问题讨论】:
“我可以遍历列表吗?” - 我不知道,是吗? - “并获取迭代器当前所在的字符串?” - 如果不能,迭代有什么意义? 检查是否有值,或者是否有一定数量的值? 【参考方案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
。
【讨论】:
我想你可以用迭代器抓取字符串,只是遇到了问题,所以我想确保它是可能的。 我也会给预备队一个机会!【参考方案2】: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()
【讨论】:
以上是关于将字符串列表插入二维向量的主要内容,如果未能解决你的问题,请参考以下文章
R语言unlist函数将复杂数据(list列表dataframe字符串String)对象处理成简单向量vector形式:将包含dataframe和字符串的向量列表转换为单个向量(删除数据名称)