相关疑难解决方法(0)

std :: vector元素是否保证是连续的?

我的问题很简单: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)

c++ standards vector

104
推荐指数
4
解决办法
4万
查看次数

假设STL向量存储始终是连续的是否安全?

如果你有一个已调整大小的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)

c++ stl vector

55
推荐指数
4
解决办法
1万
查看次数

连接两个std :: vector - 哪种方法更有效,怎么/为什么?

请考虑以下情形:

std::vector<int> A;
std::vector<int> B;
std::vector<int> AB;
Run Code Online (Sandbox Code Playgroud)

我希望AB有相同顺序A的内容和内容B.

方法1:

AB.reserve( A.size() + B.size() ); // preallocate memory
AB.insert( AB.end(), A.begin(), A.end() );
AB.insert( AB.end(), B.begin(), B.end() );
Run Code Online (Sandbox Code Playgroud)

方法2:

std::vector<int> AB ( A.begin(), A.end() ); // calling constructor
AB.insert ( AB.end(), B.begin(), B.end() );
Run Code Online (Sandbox Code Playgroud)

以上哪种方法效率更高?为什么?是否有更高效的不同方法?

c++ performance concatenation stdvector

3
推荐指数
1
解决办法
131
查看次数

标签 统计

c++ ×3

vector ×2

concatenation ×1

performance ×1

standards ×1

stdvector ×1

stl ×1