小编Nei*_*irk的帖子

从同一个向量push_back元素是否安全?

vector<int> v;
v.push_back(1);
v.push_back(v[0]);
Run Code Online (Sandbox Code Playgroud)

如果第二个push_back导致重新分配,则向量中对第一个整数的引用将不再有效.那么这不安全吗?

vector<int> v;
v.push_back(1);
v.reserve(v.size() + 1);
v.push_back(v[0]);
Run Code Online (Sandbox Code Playgroud)

这样可以安全吗?

c++ reference vector push-back language-lawyer

125
推荐指数
4
解决办法
6025
查看次数

什么是Visual Studio中的安全开发生命周期检查选项?

我正在使用Visual Studio 2013 Preview,虽然我确信我已经在早期版本中看到过它.使用向导创建新项目时,我选择C++,Win32控制台应用程序,并且有一个选项可以在我的项目上启用安全开发生命周期检查.有人可以解释这个选项对我的代码/项目的确切作用吗?

c++ sdlc visual-studio

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

关于如何在向量上调用清晰度改变容量,标准说了什么?

本网站暗示清除向量可能会改变容量:

http://en.cppreference.com/w/cpp/container/vector/clear

许多实现在调用clear()之后不会释放已分配的内存,从而有效地保持向量的容量()不变.

但根据@JamesKanze的说法,这是错误的,标准要求明确不会改变容量.

标准说什么?

c++ vector language-lawyer

42
推荐指数
1
解决办法
4775
查看次数

如何使用初始化列表创建std :: array而不直接提供大小

我怎样才能a3编译?

int main()
{
    int a1[] = { 1, 2, 3 };
    std::array<int, 3> a2 = { 1, 2, 3 };
    std::array<int> a3 = { 1, 2, 3 };
}
Run Code Online (Sandbox Code Playgroud)

使用初始化列表时,对数组的大小进行硬编码是非常不方便的,也是很脆弱的,特别是长的列表.有什么工作吗?我希望如此,否则我很失望,因为我讨厌C阵列,std::array应该是他们的替代品.

c++ initialization stdarray

39
推荐指数
2
解决办法
2万
查看次数

将布尔设置为0安全吗?

假设我有一些遗留代码,除非发现错误,否则无法更改,并且它包含以下代码:

bool data[32];
memset(data, 0, sizeof(data));
Run Code Online (Sandbox Code Playgroud)

这是bool将数组中的所有false值设置为值的安全方法吗?

更一般地,是安全的memsetbool0,以使其价值false

是否保证可以在所有编译器上运行?或者我是否要求修复?

c++ memset language-lawyer

32
推荐指数
4
解决办法
4275
查看次数

std :: abs的模板版本

这里列出了std::absC++ 中的当前重载.我想知道为什么不定义以下模板并放弃所有丑陋的C风格重载?

template <typename T> inline
T abs(const T& v) { return v < 0 ? -v : v; }
Run Code Online (Sandbox Code Playgroud)

c++ templates cmath

24
推荐指数
2
解决办法
3779
查看次数

我应该如何大括号初始化std :: pairs的std :: array?

std::array<std::pair<int, int>, 2> ids = { { 0, 1 }, { 1, 2 } };
Run Code Online (Sandbox Code Playgroud)

VS2013错误:

错误C2440:'初始化':无法从'int'转换为'std :: pair'没有构造函数可以采用源类型,或构造函数重载解析是不明确的

我究竟做错了什么?

c++ c++11 std-pair list-initialization stdarray

22
推荐指数
2
解决办法
8174
查看次数

当数据结构是模板参数时,如何判断操作是否会使迭代器失效?

具体来说,我有一个目前使用vector和push_back的类.我想跟踪的向量中有一个元素.推回向量可能会使迭代器无效,所以我保持其索引.使用索引再次找到迭代器很便宜.我不能保留矢量,因为我不知道将插入多少项.

我已经考虑过将数据结构作为模板参数,也许可以使用list.在这种情况下,从索引中查找迭代器不是一个简单的操作.由于推回列表不会使现有元素的迭代器无效,我可以只存储这个迭代器.

但是,我如何编写一个容易处理这两种情况的泛型类?

如果我可以找出push_back是否会使迭代器无效,我可以存储迭代器并在每次push_back之后通过存储操作之前的距离来更新它.

c++ containers templates iterator invalidation

15
推荐指数
1
解决办法
205
查看次数

从反向迭代器获取向量中的索引

我知道如何从向量迭代器中获取索引,方法是从中减去begin迭代器.例如:

vector<int>::iterator it = find(vec.begin(), vec.end(), x);
size_t position = it - vec.begin();
Run Code Online (Sandbox Code Playgroud)

但是,现在我想找到x向量中最后一个的索引.如何从反向迭代器中获取实际索引?我发现以下似乎有效(编辑:它没有)但也许有更好的(更惯用或其他......)方式.

vector<int>::reverse_iterator it = find(vec.rbegin(), vec.rend(), x);
size_t position = vec.size() - (it - vec.rbegin());
Run Code Online (Sandbox Code Playgroud)

c++ iterator vector find reverse-iterator

11
推荐指数
2
解决办法
5695
查看次数

const auto和auto for lambdas之间的区别

是否有任何(有用的?)区别:

auto test = [..](..){..};
Run Code Online (Sandbox Code Playgroud)

const auto test = [..](..){..};
Run Code Online (Sandbox Code Playgroud)

c++

11
推荐指数
1
解决办法
273
查看次数