我已vector<unsigned char>提交二进制数据.我需要从矢量(2个字节)中取出2个项目并将其转换为整数.如何做到这一点不是用C风格?
我写了一个小程序:
void showrecord()
{
char *a[]={ "O_BILLABLE_ACCOUNT","O_CUSTOMER_TYPE_INDICATOR",
"O_A_PARTY_MSISDN_ID","O_A_PARTY_EQUIPMENT_NUMBER",
"O_A_PARTY_IMSI","O_A_PARTY_LOCATION_INFO_CELL_ID",
...
};
vector<std::string> fields(a,a+75);
cout<<"done!!!"<<endl;
}
int main()
{
showrecord();
}
Run Code Online (Sandbox Code Playgroud)
我有一些字符串文字,我希望它们被复制到一个向量中.我没有找到任何其他简单的方法:(.或者如果有任何直接的方法来初始化矢量而不使用数组,那将非常有用.这是在我在unix上运行可执行文件后转储核心.它给了我一个警告,但是:
Warning 829: "test.cpp", line 12
# Implicit conversion of string literal to 'char *' is deprecated.
D_TYPE","O_VARCHAR_5","O_VARCHAR_6","O_VARCHAR_7","O_VARCHAR_8","O_VARCHAR_9"};
Run Code Online (Sandbox Code Playgroud)
但是相同的代码在Windows上正常运行没有任何问题.我在HPUX上使用编译器aCC.
请帮忙! 下面的编辑是转储的堆栈跟踪.
(gdb) where
#0 0x6800ad94 in strlen+0xc () from /usr/lib/libc.2
#1 0xabc0 in std::basic_string<char,std::char_traits<char>,std::allocator<char>>::basic_string<char,std::char_traits<char>,std::allocator<char>>+0x20 ()
#2 0xae9c in std<char const **,std::basic_string<char,std::char_traits<char>,std::allocator<char>> *,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>>::uninitialized_copy+0x60 ()
#3 0x9ccc in _C_init_aux__Q2_3std6vectorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc__TQ2_3std9allocatorXTQ2_3std12basic_stringXTcTQ2_3std11char_traitsXTc_TQ2_3std9allocatorXTc____XTPPCc_FPPCcT118_RW_is_not_integer+0x2d8
()
#4 0x9624 in showrecord () at test.cpp:13
#5 0xdbd8 in …Run Code Online (Sandbox Code Playgroud) 通过阅读std::vector我明白的参考
insert当达到最大容量时调用将导致重新分配std::vector(导致迭代器失效),因为为其分配了更大容量的新内存.目标是保证连续数据的保证.
只要我坚持低于最大容量insert就不会导致(并且迭代器将完好无损).
我的问题如下:
当reserve自动调用时insert,有没有办法控制必须保留多少新内存?
假设我有一个初始容量为100的向量,当达到最大容量时,我想分配额外的20个字节.
有可能吗?
学科.
编译:g ++ -g -Wall -o program program.cpp
正在运行:gdb -tui程序
谢谢,
哈维尔.
我有一个关于如何std::unique_ptr插入a的问题std::vector.想象一下,我有一个生成对象的函数,如下所示:
std::unique_ptr<CObject> createObjects()
{
return std::unique_ptr<CObject> (new CObject());
}
Run Code Online (Sandbox Code Playgroud)
现在在我的代码中,我有一个std::vector<std::unique_ptr<CObjects>> vec和我插入的元素如下:
vec.push_back(createObjects());
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:unique_ptr移动到矢量中还是复制了?
我正在遍历地图,该地图值类型是向量。我在地图中一一获取向量并使用 std::find() 方法搜索项目。
for(BoundWaysMap::const_iterator iterator = boundWays.begin(); iterator != boundWays.end(); iterator++)
{
string wayId = iterator->first;
std::vector<string> nodesRefCollection = iterator->second;
if(std::find(nodesRefCollection.begin(), nodesRefCollection.end(), id)!=nodesRefCollection.end())
{
std::string cont = "|" + wayId;
legsFrame.append(cont);
legsCount ++;
isFound = true;
}
}
Run Code Online (Sandbox Code Playgroud)
我想从 find 方法中获取找到的项目的索引。
假设我有价值观double start,double end和步长double step。
填充std::vector<double>从 at 开始start并stepsize随着当前值小于递增的值的最简单方法是end什么?
我在问自己,是否有一个 stl 函数使这个任务成为单线任务。
std::vector<double> fill(double start, double end, double step) {
// Code
}
main() {
auto ret=fill(0.2, 2.3, 0.2);
// ret = {0.2, 0.4, 0.6, ... , 2.2}
}
Run Code Online (Sandbox Code Playgroud) 考虑std::vector<T>某种类型T.我收到一个指向这种类型的指针到函数中,也是一个实例T; t说.
我的功能看起来像这样:
void bar(std::vector<T>* foo, const T& t)
{
foo->clear();
foo->push_back(t);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在一个语句中编写函数体?*foo = t;由于不存在适当的赋值运算符而无法工作.我也在考虑使用
foo->assign(&t, &t + 1);
Run Code Online (Sandbox Code Playgroud)
但那似乎很顽皮.
我正在使用C++ 11.
我想创建一个std::vector<float> vpd将引用的float*.
float * old = new float[6];
for (int i = 0; i < 6; i++)
{
old[i] = i;
}
vector<float> vpd(6);
auto refasd = &*vpd.begin();
*refasd = *old;
vpd[0] = 23;
cout << old[0] << endl;
Run Code Online (Sandbox Code Playgroud)
我应该如何修改代码,如果我想要得到23的cout?
我尝试以vector<vector<int>>非循环的方式实现对a的所有元素的总结。
之前,我已经检查了一些相关的问题,如何总结C ++向量的元素?。
因此,我尝试使用std::accumulate它来实现它,但是我发现很难重载Binary Operatorin std::accumulate并实现它。
因此,我对如何实现它感到困惑,std::accumulate还是有更好的方法?
如果不介意有人可以帮助我吗?
提前致谢。