相关疑难解决方法(0)

我在哪里可以找到当前的C或C++标准文档?

对于许多问题,答案似乎可以在"标准"中找到.但是,我们在哪里找到它?最好是在线.

谷歌搜索有时会觉得徒劳,尤其是对于C标准,因为他们在编程论坛的大量讨论中被淹没.

要开始这个,因为这些是我现在正在搜索的,那里有很好的在线资源:

  • C89
  • C99
  • C11
  • C++ 98
  • C++ 03
  • C++ 11
  • C++ 14

c c++ standards c++-faq

394
推荐指数
8
解决办法
12万
查看次数

设置int指针的向量,指向int的向量的元素

我尝试将指针向量设置为另一个向量的元素

vector<int> vecInt;
vector<int*> vecPInt;
int main()
{
    vecInt.push_back(1);
    vecPInt.push_back(&vecInt[0]);
    vecInt.push_back(1);
    vecPInt.push_back(&vecInt[1]);
    for(auto v:vecInt)
    {
        cout<<v<<"\n";
    }
    for(auto v:vecPInt)
    {
       cout<<*v<<"\n";
    }
Run Code Online (Sandbox Code Playgroud)

}

但结果是

1

1

11717664

1

还有另一种方法可以做到这一点.但为什么在这种情况下这是行为?

c++ pointers vector

2
推荐指数
1
解决办法
170
查看次数

当向量的维度必须递增时,避免重新分配向量

我有一个

vector< pair<vector<double> , int>> samples;
Run Code Online (Sandbox Code Playgroud)

该向量将包含许多元素.为了效率rason我以这种方式初始化它:

vector< pair<vector<double> , int>> samples(1000000);
Run Code Online (Sandbox Code Playgroud)

我从另一个容器中预先知道了(不是编译时)的大小.问题是我必须减少1个元素的向量维度.实际上,这种情况不是问题,因为调整尺寸小于初始没有重新分配.我可以这样做

samples.resize(999999);

问题是在某些情况下,而不是减少1个元素的维度,我必须增加元素的维度.如果我做

samples.resize(1000001);
Run Code Online (Sandbox Code Playgroud)

存在重新分配的风险,我希望避免效率rasons.我问是否可能解决我的问题是这样的:

vector< pair<vector<double> , int> samples;
samples.reserve(1000001);
samples.resize(1000000);
.
. Elaboration that fill samples 
.
samples.resize(1000001); //here I don't want reallocation
Run Code Online (Sandbox Code Playgroud)

或者如果有更好的解决方案?提前致谢!

(我正在使用C++ 11编译器)

c++ c++11

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

std::vector new 内存不足

我正在为嵌入式平台STM32编写C++程序。我曾经使用普通数组,但这是我第一次在其中使用向量。到目前为止,它在大多数情况下运行良好。然而,在极少数情况下,我得到了标题中所述的错误,尽管它不应该出现。当我没有想法时,将不胜感激一些帮助。

我的情况

向量是这样的

struct Boundary{
  vector<unsigned short> x; //The x coordinates
  vector<unsigned short> y; //The y coordinates  
};
Run Code Online (Sandbox Code Playgroud)

每次我使用这些向量时我都会清除它们

boundary0.x.clear();
boundary0.y.clear();
Run Code Online (Sandbox Code Playgroud)

我用正常的push_back添加元素

奇怪的部分

有时,在向向量添加元素时,程序会以“Operator new out of memory”结束。

“!啊,你的内存不够了!”- 你会说,但这就是奇怪的部分。到目前为止,向量只有 275 个元素,很短,只有 550 个字节。

但是这个程序可以毫无问题地处理具有更多元素(500 或更多)的相同向量。

不知何故,你之前泄露了内存!——可以这么说,我也怀疑这一点。也许我以前使用过这个并且未能清理它(尽管我按照我的说明清理了它),但即使我断开并连接处理器并清除以前使用的任何内存,也会出现此错误。

我不知道为什么会发生这种情况。非常感谢任何帮助、评论或建议。

c++ vector out-of-memory stm32

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

标签 统计

c++ ×4

vector ×2

c ×1

c++-faq ×1

c++11 ×1

out-of-memory ×1

pointers ×1

standards ×1

stm32 ×1