我们如何以 2D 矢量的形式访问此 1D 矢量
How are we accessing this 1D vector as a 2D one
我正在查看存储桶排序的代码:
void bucketSort(float arr[], int n)
{
// 1) Create n empty buckets
vector<float> b[n];
// 2) Put array elements in different buckets
for (int i=0; i<n; i++)
{
int bi = n*arr[i]; // Index in bucket
b[bi].push_back(arr[i]);
}
// 3) Sort individual buckets
for (int i=0; i<n; i++)
sort(b[i].begin(), b[i].end());
// 4) Concatenate all buckets into arr[]
int index = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < b[i].size(); j++)
arr[index++] = b[i][j];
}
b[n] 在这里初始化为 1D 向量:
vector<float> b[n];
在连接函数中作为 2D 数组访问:
arr[index++] = b[i][j];
b[n] 在这里初始化为 1D 向量是怎样的:
vector<float> b[n];
这不会初始化一维向量。
相反,它声明了一个vector<float>
的 1D 数组。
这意味着b[i][j]
正在访问向量数组中的第i
个元素,然后在该向量数组中访问其第j
个元素。
vector<float> b[n];
不是一维向量。它是一个向量数组。它也是一个可变长度数组,C++无效(它是某些编译器提供的 C 扩展)。
如果你想要一个矢量的二维矢量,定义将是:
vector<vector<float>> b(n);
请注意类型vector<vector<float>>
和括号,而不是方括号,用于在构造外部向量时初始化外部向量的大小。
vector<float> b[n];
创建一个std::vector<float>
的std::array
,所以它是一个n个向量的数组。此示例可能会有所帮助:
std::vector<float> b[2];
float i = 1;
std::vector<float> first_vector = b[0];
first_vector.push_back(i);
相关文章:
- 如何在C++上安全地访问矢量?
- 如何访问矢量<int>到 int 的映射?
- 以C++访问矢量中的地图元素
- 从反向顺序C++访问矢量时运行时出错
- 编译器(Visual C++)如何优化按索引访问矢量元素?
- 通过引用访问矢量元素是否会降低C++的空间复杂性?
- 访问矢量元素时索引越界异常
- 为什么我无法访问矢量车
- 尝试访问矢量的 C++ 分段错误
- 当从其他方法返回 vector 时,C++无法访问矢量元素
- 访问矢量元素的指针
- 访问矢量<矢量<int>>元素
- 为什么我无法访问矢量?
- 如何访问矢量<Vec4i>值
- 访问矢量时中止
- 通过Atomic :: load()访问矢量时访问违规行为
- 在 CUDA / 推力中,如何在每个操作期间访问矢量元素的邻居?
- 访问矢量<矢量>作为<int>平面数组
- C++ 访问矢量内的成对元素
- 通过索引访问矢量的速度:向后与向前