RRR*_*RRR 5 c++ vector stdvector
以下代码是否正常?:
std::vector<char> var;
size_t requiredSize;
getenv_s(&requiredSize, NULL, 0, "Something");
if (requiredSize == 0)
{
return ENV_NOT_EXIST;
}
if(var.size() < requiredSize)
var.resize(requiredSize);
// Get the value of the environment variable.
getenv_s(&requiredSize, &var[0], requiredSize, "Something");
std::string str(var.begin(),var.end());
Run Code Online (Sandbox Code Playgroud)
如果这段代码没问题,有人可以解释一下如何更新矢量begin()和end()值var吗?看起来这个代码直接改变了向量的内部数组,而不是std::vectorapi - 所以这些值如何更新为实际大小?
std::vector 保证数据连续存储,所以写入数据,只要你没有超出结束就完全没问题了:
从C++ 11标准第23.3.6.1.1节:
向量的元素是连续存储的,这意味着如果v是一个向量,其中T是某种类型而不是bool,那么它服从所有0 <= n <v的身份&v [n] ==&v [0] + n .尺寸().
但请注意,调整向量大小可能会移动数据并使迭代器无效.
不幸的是,标准不需要std::vector<T>::iterator是原始指针类型(尽管通常是这样).因此,您无法轻松使用std::vector<T>::begin()访问第一个元素.有std::vector<T>::data(),它返回指向第一个元素的指针,可用于需要原始c数组的代码.
我建议像这样重写你的电话:
getenv_s(&requiredSize, var.data(), var.size(), "Something");
if (requiredSize < var.size())
var.resize(requiredSize);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2402 次 |
| 最近记录: |