- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 Windows 和 Linux 中遇到了 valarray 的不同行为。有谁知道这个或知道在哪里看?很明显,在两个系统上工作的一个版本是正确的 C++,但为什么另一个在 Windows 上工作? valarray 的实现是否有更多差异?
适用于 MSVC/Windows 但不适用于 gcc/Linux 的代码示例:
valarray<signed short> myValues;
for(size_t s = 0; s < 10; s++)
{
slice dataSlice(1, 1, 1);
// on Linux, this slice operation gives me a segmentation fault
myValues= RawData[dataSlice];
}
我找到它来修复 gcc/Linux 版本的代码:
for(size_t s = 0; s < 10; s++)
{
slice dataSlice(1, 1, 1);
valarray<signed short> myValues = RawData[dataSlice];
}
gcc/Linux 版本期望左值 (myValues) 已经初始化。这在 MSVC/Windows 上似乎不是必需的。我可以在 Linux 上调用 myValues.resize(1)
,它也能正常工作。
现在,有没有人知道确切的差异或互联网上的资源?是否有使用 valarray 的最佳实践?
软件版本:
谢谢大家
更新:详细代码示例。编译。第一个示例在 Linux 中给出了段错误,但在 Windows 中运行良好。
// This example compiles both on Windows with MSVC and on Linux with GCC.
// It gives a segmentation fault in Linux.
// It gives the expected output on Windows.
#include "stdafx.h"
#include <iostream>
#include <valarray>
int main(int argc, char **argv) {
//init base data
std::valarray<signed short> myData(10);
for (int i = 0; i < 10; i++)
{
myData[i] = i;
}
std::valarray<signed short> myValues;
for (int i = 0; i < 10; i++)
{
myValues = myData[std::slice(0, i, 1)];
std::cout << "myValues: ";
for (size_t k = 0; k < myValues.size(); k++)
{
std::cout << myValues[k] << ",";
}
std::cout << std::endl;
}
}
以下示例在 Linux 和 Windows 上运行良好。请注意 for 循环内 myValues 的声明和初始化,就在切片完成的地方。
#include "stdafx.h"
#include <iostream>
#include <valarray>
int main(int argc, char **argv) {
//init base data
std::valarray<signed short> myData(10);
for (int i = 0; i < 10; i++)
{
myData[i] = i;
}
for (int i = 0; i < 10; i++)
{
std::valarray<signed short> myValues = myData[std::slice(0, i, 1)];
std::cout << "myValues: ";
for (size_t k = 0; k < myValues.size(); k++)
{
std::cout << myValues[k] << ",";
}
std::cout << std::endl;
}
}
预期输出:
myValues:
myValues: 0,
myValues: 0,1,
myValues: 0,1,2,
myValues: 0,1,2,3,
myValues: 0,1,2,3,4,
myValues: 0,1,2,3,4,5,
myValues: 0,1,2,3,4,5,6,
myValues: 0,1,2,3,4,5,6,7,
myValues: 0,1,2,3,4,5,6,7,8,
最佳答案
valarray.assign/8
:valarray<T>& operator=(const slice_array<T>&);
valarray<T>& operator=(const gslice_array<T>&);
valarray<T>& operator=(const mask_array<T>&);
valarray<T>& operator=(const indirect_array<T>&);Requires: The length of the array to which the argument refers equals
size()
.
您创建 myValues
作为空 valarray
大小为 0。使用 valarray<T>& operator=(const slice_array<T>&);
的前提条件不满足。
替换
myValues = myData[std::slice(0, i, 1)];
与
auto s = std::slice(0, i, 1);
myValues.resize(s.size());
myValues = myData[s];
或
myValues = std::valarray<signed short>(myData[std::slice(0, i, 1)]);
它会起作用。
我还不明白为什么slice_array<T> operator[](slice slicearr)
选择而不是 valarray<T> operator[](slice slicearr) const
.
关于c++ - gcc 和 msvc(或 Linux 和 Windows)中的 valarray 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26883840/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!