将元素插入 2D 矢量
Inserting elements into 2D vector
所以我正在创建一个实现邻接列表的类。目前在我的类定义中,我初始化了两个向量:
vector<vector<int>> adjList;
vector<int> neighbors;
我声明了两个我计划用来实现它的函数:
bool constructAdjList();
bool insertIntoAdjList(int, int);
我很难理解 2D 矢量。我知道它本质上是向量的向量,但我对如何将新值插入其中一个"子向量"感到困惑。例如,我能够在createAdjList中创建一个邻接列表,该列表为空,并具有以下循环:
for (int i = 0; i < numOfValues; i++){
neighbors.push_back(0);
adjList.push_back(neighbors);
neighbors.clear();
}
但是我怎么说,push_back值 5 到 adjList 中的第 4 个向量,它将在我的 insertIntoAdjList 函数中表示为
insertIntoAdjList(4, 5);
我知道我可以通过说adjList[4][1]来访问2D向量中的特定值,但是我怎样才能将一个值推到上面呢?
谢谢!
要推送作为另一个向量的元素的向量,您只需这样做
adjList[x].push_back();
如果最初你在向量中没有任何值 -您可以将值推送到一个向量中,然后将此向量推送到 2D 向量中。例如:
vector< vector<int> > vt1;
vector<int> vt2;
vt2.push_back(value);
vt1.push_back(vt2);
如果您的向量已经填充,则 -
vt1[index].push_back(value);
这里有几点注意事项。
只需使用两个成员的构造函数,就可以显着缩短循环:
vector<int> neighbors(1, 0); // set to length 1, value is zero
vector<vector<int>> adjList(numOfValues,neighbors); // "outer" vector is numOfValues long
. // each row is a *COPY* of neighbor
如果你不能在构造时做到这一点(也许numOfValues还不知道(,那么我们仍然可以使用更好的循环措辞:
// neighbors object can be reused
neighbors.clear(0);
neighbors.push_back(0);
adjList.reserve(numOfValues); // reserving memory ahead of time will prevent allocations
for (int i = 0; i < numOfValues; i++){
adjList.push_back(neighbors); // push_back is by *COPY*
}
在您的示例中,通过使用 clear 和 push_back 在每次循环迭代中基本上构建相同的向量,您将面临每次迭代分配和释放的风险。在实践中,大多数实现不会这样做,但如果我们可以缩短并可能使事情更有效率,我们也可以这样做。
最后,如果邻居的数量相对较小并且行与行相似(例如,具有四面体元素的有限元代码,其中每个元素连接到~5个其他元素(,那么正如其他人所建议的那样,使用不同的结构可能比向量向量更好。例如,逻辑上组织的单个向量使得每 N 个元素开始一个新的"行"。
相关文章:
- 打印第二列时的2d字符矢量打印空间
- 我是 C++ 的初学者,我想知道如何在 2D 矢量中获取重复值
- opengl glBegin(GL_LINES) 和 glBegin(GL_POINT) 在 2D 中不可视化点矢量
- 使用矢量将文本文件中的输入存储到 2D 数组中
- 如何在 c++ 中格式化和访问 2D 矢量数组中的数据
- 读取字符串文本输入以创建 2D 矢量
- 识别 2D 矢量C++中的位置
- Cython:无法分配给 2D 矢量
- 按列随机播放 2D 矢量
- 初始化空的 2D 矢量?
- 如何在 2d 矢量 c++ 中复制元素并将其放在原始元素旁边
- 如何访问具有地图的2D矢量?
- 通过功能进行2D矢量输入和显示
- 在C++中将对象添加到 2D 矢量
- 太空入侵者 – 2D 矢量运动算法
- 从 2 个 1D 矢量创建 2D 矢量
- C++ 默认参数的重新定义:参数 1 (矢量 2D)
- 矢量2D擦除元素并保持字段为空
- C STL库矢量2D数组不超出边界
- 在c++ Qt中显示2d矢量/2d数组到简单的图形