如何使用new声明二维数组?
就像,对于"普通"数组,我会:
int* ary = new int[Size]
Run Code Online (Sandbox Code Playgroud)
但
int** ary = new int[sizeY][sizeX]
Run Code Online (Sandbox Code Playgroud)
a)不工作/编译和b)没有完成什么:
int ary[sizeY][sizeX]
Run Code Online (Sandbox Code Playgroud)
确实.
我的问题很简单:std :: vector元素是否保证是连续的?在order word中,我可以使用指向std :: vector的第一个元素的指针作为C数组吗?
如果我的记忆力很好,那么C++标准就没有这样的保证.但是,如果元素不连续,那么std :: vector要求几乎不可能满足它们.
有人可以澄清一下吗?
例:
std::vector<int> values;
// ... fill up values
if( !values.empty() )
{
int *array = &values[0];
for( int i = 0; i < values.size(); ++i )
{
int v = array[i];
// do something with 'v'
}
}
Run Code Online (Sandbox Code Playgroud) 我知道这at()比[]它的边界检查慢,这也在类似的问题中讨论,如C++ Vector at/[] operator speed 或:: std :: vector :: at()vs operator [] << Surprising results !! 速度慢5到10倍!.我只是不明白这种at()方法有什么用处.
如果我有一个像这样的简单向量:std::vector<int> v(10);我决定通过使用at()而不是[]在我有索引的情况下访问它的元素i并且我不确定它是否在向量范围内,它迫使我用try-catch包装它块:
try
{
v.at(i) = 2;
}
catch (std::out_of_range& oor)
{
...
}
Run Code Online (Sandbox Code Playgroud)
虽然我能够通过自己使用size()和检查索引来获得相同的行为,这对我来说似乎更容易和方便:
if (i < v.size())
v[i] = 2;
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
使用vector :: at over vector :: operator []有什么好处?
我什么时候应该使用vector :: at而不是vector :: size …
如果你有一个已调整大小的STL向量,是否可以安全地获取元素0的地址并假设其余的向量将跟随内存?
例如
vector<char> vc(100);
// do some stuff with vc
vc.resize(200);
char* p = &vc[0];
// do stuff with *p
Run Code Online (Sandbox Code Playgroud) 我想知道是否存在一种聪明的方式将信息作为一维数组呈现在向量中。示例:让我们创建一个包含5x3 int元素的向量的向量
vector< vector<int>> iVector;
ivector.resize( 5 );
for(i = 0; i < 5; i++){
iVector[i].resize(3);
}
Run Code Online (Sandbox Code Playgroud)
但是现在我希望将此结构转换为一维数组:
int* myArray = new int[5*3];
Run Code Online (Sandbox Code Playgroud)
因此,我可以按以下方式访问我想要的每个元素:
for (i =0;i < 5; i++)
for(j =0; j< 3; j++)
myArray[i*3+j] = ...
Run Code Online (Sandbox Code Playgroud)
我知道我可以将向量逐个元素复制到数组,但是我想知道是否有一种方法可以直接解决向量到数组的转换问题。我也知道向量可以用来解决iVector[i][j],但不幸的是它必须是一个数组,因为它将被发送到GPU,而GPU无法理解向量。
我需要分配行向量,其中行包含行向量.我知道矢量是连续的.我想知道矢量矢量是否也是连续的.示例代码如下
vector<long> firstRow;
firstRow.push_back(0);
firstRow.push_back(1);
vector<long> secondRow;
secondRow.push_back(0);
secondRow.push_back(1);
vector< vector < long> > data;
data.push_back(firstRow);
data.push_back(secondRow);
Run Code Online (Sandbox Code Playgroud)
内存中的序列是0 0 1 1吗?