push_back issue std::vector
push_back issue std::vector
OSX 10.7,XCode 4。
我有一个小问题:经过一个选择过程后,我需要将2D vector<vector<float>>
推回到3D Vector。它在stl::矢量模板的push_back函数中抛出EXC_BAD_ACCESS错误。它似乎应该很简单(我以前曾多次处理过复杂的数据结构),我尝试过各种各样的想法,但都无济于事。其他一切都起作用,并将我期望的值输出到命令行。我确信它的代码是盲目的,而且很容易获得一些代表。
我之所以这么问,只是因为我相信我的语法是正确的,但在编译时我遇到了问题。以下是一些示例代码:
实施:
for(int i=0;i<fdisVec.size();i++){
int j;
if(fdisVec[i] < fdisVec2[i]){
j = 0;
}
else if(fdisVec2[i] < fdisVec[i]){
j = 1;
}
clusters[j].push_back(allMfccs[i]);
}
并且my.h具有这样声明的对象(类的公共成员):
vector< vector <float> > allMfccs;
vector< vector < vector <float> > > clusters;
如果有帮助的话,fdisVec和fdisVec2也是2d矢量,然而,"if else"语句会按照我的意愿进行响应——我非常怀疑这与此有关。
如果fdisVec[i]==fdisVec2[i]怎么办?
在这种情况下,j未初始化(垃圾),有时该值不是集群向量的有效索引。
尽管cluster.size() == 0
将是一个问题(正如@VaughnCato在回答中所讨论的),但访问集群的元素不会导致编译时错误,但在运行程序时很可能会使程序崩溃。
然而,编译时错误是由于clusters[j]
期望vector< vector< float > >
,而allMfccs[i]
只是vector< float >
。
因此,根据您对clusters
和allMfccs
的声明,您需要推送allMfccs
。
相关文章:
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- 字符串化递归的"std::vector<std::vector<...>>"而不使用部分模板函数专用化
- 连接和压缩标准::vector<std::字符串的最佳方法>
- C++从 std::vector<std::function<中删除 std::function>>
- 如何在构造函数初始值设定项列表中使用 n 个元素初始化 std::vector<std::time_t>
- 如何使用 CUDA 将 std::vector<std::string> 复制到 GPU 设备
- 编译错误 std::vector<std::shared_ptr<T>>迭代器和擦除方法
- 将 std::vector<std::unique_ptr<T>> 移动到 std::vector<std::shared_ptr<T>>
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 使用 std::vector<std::future<int>> 和 std::async 启动几个线程时中止
- 为什么转置这个 std::vector<std::vector<std::string> > 这么慢?
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- 在 boost::<double>asio::buffer 中使用像 std::vector<std::complex> 这样的参数
- 如何从 std::initializer_list<char const* 构建 std::vector<std::string>>
- 如何检查 std::vector<std::string> 的元素是否以某个子字符串开头?
- 在 std::vector<std::vector 中重新存储内部向量<TYPE>>
- 将 std::vector<std::string> 转换为 const char* const*
- 不能将结构push_back() 转换为 std::vector<std::shared_ptr<theStruct>> theVector
- SWIG:传递一个 std::vector< std::vector <double> >指向 python 的指针
- 将 std::vector<std::p air<const K, V>*> 转换为 std::vector<std::p air<const K, V>&g