以行和列的形式访问 vector<vector<char> > 元素
Posted
技术标签:
【中文标题】以行和列的形式访问 vector<vector<char> > 元素【英文标题】:Accessing vector<vector<char> > elements as rows and columns 【发布时间】:2011-02-21 22:10:46 【问题描述】:我正在尝试使用一个
vector<vector<char> > matrix;
作为一个实际的矩阵。
matrix 初始化为 '\0' 并在此过程中被填充。
让我们想象在某个时间点我处于这种情况:
0 1 2 3
0 a b c \0
1 b b \0 \0
2 c \0 \0 \0
3 \0 \0 \0 \0
如果我想在第一行添加一个 char *,我可以这样做:
&word_square[0][0]
这会给我一个指向第一行的指针,我可以将其用作 C 字符数组(即“abc”)
如果我想以相同的方式获取第一列怎么办? 有可能还是我必须用 for 来做?
int i =0;
string column;
while(matrix[i][0] != '\0' )
column.push_back(matrix[i][0]);
i++;
我很想得到一个更清洁的解决方案,就像我在上面对行所做的那样。 初始化一个字符串只是为了获取我需要的列,我已经有了它不是很好。此外,它会减慢我的进程。
非常感谢那些愿意提供帮助的人。
【问题讨论】:
在 C++ 中,有没有什么办法可以在没有复制开销的情况下做我想做的事情? 【参考方案1】:使用vector< vector<char> >
,您无法保证内部向量将其数据连续存储在内存中,这意味着除非您手动复制数据,否则无法让char*
按列顺序指向元素.
【讨论】:
好的,谢谢。太糟糕了,我需要复制开销来获取列。关于行,我使用它们的方式可以吗? 是的,你可以保证一个向量的字符连续存储在内存中,或者你甚至可以只做word_square[0].data()
谢谢,你知道我如何为列做这件事吗?也许使用其他一些数据结构?
如果不复制就没有办法做到这一点,因为您基本上希望通过同时按行顺序和列顺序存储字符来吃蛋糕和吃蛋糕。【参考方案2】:
您可以slice a std::valarray 做一些您感兴趣的事情。它们使用连续内存,切片管理对原始数据对象的访问,因此不涉及复制。
【讨论】:
【参考方案3】:用向量的向量是不可能的。最好的办法是编写自己的返回代理对象的类。
【讨论】:
以上是关于以行和列的形式访问 vector<vector<char> > 元素的主要内容,如果未能解决你的问题,请参考以下文章